как открыть selenium webdriver один раз и использовать его

#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. Спасибо, Жюльен! добавление переменной класса для драйвера и для объектов ожидания работает идеально, это то, что мне нужно.