#c#
#c#
Вопрос:
у меня есть простой веб-сайт (https://www.orbismodding.com /) и я хочу это автоматизировать. для этого я использовал selenium firefox webdriver и создал функцию нажатия кнопки для отправки текста в поле ввода и нажатия кнопки поиска и получения результатов в текстовом поле мой код :
private void mtboxCUSA_ButtonClick(object sender, EventArgs e)
{
string cusa = mtboxCUSA.Text;
FirefoxOptions firefoxBinary = new FirefoxOptions();
firefoxBinary.AddArgument("-headless");
firefoxBinary.AddArgument("--width=300");
firefoxBinary.AddArgument("--height=300");
firefoxBinary.SetPreference("permissions.default.image", 2);
firefoxBinary.SetPreference("permissions.default.stylesheet", 2);
var ffds = FirefoxDriverService.CreateDefaultService();
ffds.HideCommandPromptWindow = true;
IWebDriver driver = new FirefoxDriver(ffds, firefoxBinary);
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
driver.Navigate().GoToUrl("https://www.orbismodding.com/");
wait.Until(ExpectedConditions.ElementExists(By.CssSelector("#titleID")));
driver.FindElement(By.CssSelector("#titleID")).SendKeys(cusa);
driver.FindElement(By.Name("searchBtn")).Click();
wait.Until(ExpectedConditions.ElementExists(By.XPath("/html/body/div/div/h3")));
string gname = driver.FindElement(By.XPath("/html/body/div/div/h3")).Text;
btboxCusaResult.Text = gname;
}
проблема в том, что каждый раз, когда я нажимаю на кнопку, требуется время, чтобы открыть новое окно webdriver для автоматизации! как я могу использовать существующий webdriver, который я использовал раньше?
и есть ли какой-либо другой способ selenium? (например, HttpRequest)
Ответ №1:
Вы можете сохранить это простым и добавить переменную класса для драйвера и для объектов wait.
В итоге получилось бы что-то вроде этого:
IWebDriver driver;
WebDriverWait wait;
private void mtboxCUSA_ButtonClick(object sender, EventArgs e)
{
string cusa = mtboxCUSA.Text;
if(driver == null)
{
FirefoxOptions firefoxBinary = new FirefoxOptions();
firefoxBinary.AddArgument("-headless");
firefoxBinary.AddArgument("--width=300");
firefoxBinary.AddArgument("--height=300");
firefoxBinary.SetPreference("permissions.default.image", 2);
firefoxBinary.SetPreference("permissions.default.stylesheet", 2);
var ffds = FirefoxDriverService.CreateDefaultService();
ffds.HideCommandPromptWindow = true;
driver = new FirefoxDriver(ffds, firefoxBinary);
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
}
driver.Navigate().GoToUrl("https://www.orbismodding.com/");
wait.Until(ExpectedConditions.ElementExists(By.CssSelector("#titleID")));
driver.FindElement(By.CssSelector("#titleID")).SendKeys(cusa);
driver.FindElement(By.Name("searchBtn")).Click();
wait.Until(ExpectedConditions.ElementExists(By.XPath("/html/body/div/div/h3")));
string gname = driver.FindElement(By.XPath("/html/body/div/div/h3")).Text;
btboxCusaResult.Text = gname;
}
Если вы хотите протестировать данные, поступающие на ваш веб-сайт, и предполагаете, что у вас есть REST Api на серверной части вашего веб-сайта, вы могли бы провести интеграционные тесты с вашими API.
В этом случае вы бы использовали HttpClient для выполнения своих тестов.
Комментарии:
1. Спасибо, Жюльен! добавление переменной класса для драйвера и для объектов ожидания работает идеально, это то, что мне нужно.