Ожидание в тестах Selenium после создания веб-драйвера в текущей теме - PullRequest
0 голосов
/ 12 октября 2018

У меня был вопрос о тесте селена с хромированным безголовым вариантом.Иногда тест ждет что-нибудь, почему он долго 10 минут?Я добавил в тест таймаут 40 сек.

15:41:54 INFO: Selenium WebDriver v. 3.14.0 build time: 2018-08-02T20:19:58.91Z
15:41:54 Oct 12, 2018 12:41:55 PM com.codeborne.selenide.impl.WebDriverThreadLocalContainer createDriver
15:41:54 INFO: Create webdriver in current thread 1: ChromeDriver -> ChromeDriver: chrome on LINUX (6332d1a2dee8e95f05da4130b99237f9)
15:51:54 [34mEmbed Failed timeout
15:51:54   (Session info: chrome=69.0.3497.100)
15:51:54   (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 3.10.0-862.14.4.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
15:51:54 Command duration or timeout: 0 milliseconds

Настройки Selenium:

    case "chrome":
        testBrowserName = "CH";
        WebDriverManager.chromedriver().setup();
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--disable-dev-shm-usage");
        chromeOptions.addArguments("--no-sandbox");
        chromeOptions.addArguments("--headless");
        chromeOptions.addArguments("--window-size=1920,1080");
        ChromeDriver driver = new ChromeDriver(chromeOptions);
        WebDriverRunner.setWebDriver(driver);
        break;

1 Ответ

0 голосов
/ 12 октября 2018

Вы не упомянули о вашем сценарии использования в деталях, и неясно, почему вы бы хотели ограничить свои тесты только реализацией ChromeDriver .

Если выиспользуйте ChromeDriver driver = new ChromeDriver(); экземпляр ChromeDriver , который будет создан, сможет вызывать и действовать только на методы, реализованные ChromeDriver и поддерживаемые только Chrome Browser .Для работы с другими браузерами вы должны специально создавать отдельные объекты, как показано ниже:

  • FirefoxDriver driver = new FirefoxDriver();
  • InternetExplorerDriver driver = new InternetExplorerDriver();

Интерфейс WebDriver

С точки зрения Selenium интерфейс WebDriver аналогичен соглашению, которое стороннее Поставщики браузеров подобно Mozilla , Chrome , Internet Explorer , Safari и т. Д. Должны придерживаться и реализовывать одно и то же.Это, в свою очередь, поможет конечным пользователям использовать открытые API-интерфейсы для написания общего кода и реализовать функциональные возможности всех доступных браузеров без каких-либо изменений.

Вы найдете подробныйобсуждение в в чем разница между ChromeDriver и WebDriver в селене?

Решение

Вместо использования переключателя реализации ChromeDriver на Интерфейс WebDriver .В соответствии с текущим сценарием мы должны непосредственно реализовать реализации WebDriver Interface .В настоящее время мы пишем Automated Test Script для этого интерфейса, чтобы в будущем мы могли поменяться в более полнофункциональном браузере, когда есть потребность в нем.

Пример:

case "chrome":
    testBrowserName = "CH";
    WebDriverManager.chromedriver().setup();
    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.addArguments("--disable-dev-shm-usage");
    chromeOptions.addArguments("--no-sandbox");
    chromeOptions.addArguments("--headless");
    chromeOptions.addArguments("--window-size=1920,1080");
    WebDriver driver = new ChromeDriver(chromeOptions);
    WebDriverRunner.setWebDriver(driver);
    break;
...