t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenide + RemoteWebDriver + Change Default Timeout

exceptions
java
selenide
webdriver
Теги: #<Tag:0x00007fb3025b6370> #<Tag:0x00007fb3025b5f38> #<Tag:0x00007fb3025b5ba0> #<Tag:0x00007fb3025b59c0>

(Дмитрий Хижов) #1

Всем привет!
Как можно изменить таймауты для Selenide при работе с RemoteWebDriver?
локально меняется просто Configuration.timeout=8000;. Но как быть, в случае если тесты запускаются удалённо?
Сейчас я инициализирую драйвер таким образом:

RemoteWebDriver driver=new RemoteWebDriver(newURL(seleniumUrl),capabilities);
WebDriverRunner.setWebDriver(driver);

Как в таком случае можно задать таймауты?


(Vasily) #2

driver.manage().timeouts().implicitlyWait(8000L, TimeUnit.MILLISECONDS)


(Дмитрий Хижов) #3

Спасибо за ответ! Я пробовал так, и это к сожалению не срабатывает. Стандартное время ожидания остается 4 секунды. Я же правильно понимаю нужно было делать так?

RemoteWebDriver driver=new RemoteWebDriver(newURL(seleniumUrl),capabilities);
driver.manage().timeouts().implicitlyWait(8000L, TimeUnit.MILLISECONDS)
WebDriverRunner.setWebDriver(driver);

(Vasily) #4

Да. А, может, тогда после:

WebDriverRunner.getWebDriver().manage().timeouts().implicitlyWait(8000L, TimeUnit.MILLISECONDS).


(asolntsev) #5

Ой, народ, всё неправильно!
implicitWait вообще не надо задавать. Это точно плохая идея.

В селениде таймаут задаётся именно так: Configuration.timeout=8000 - независимо от того, локальный браузер или удалённый. Больше ничего мудрить не нужно.

P.S. Кстати, советую не использовать метод WebDriverRunner.setWebDriver(), а вместо этого просто задать настройку Configuration.remote=seleniumUrl. Тогда селенид сам откроет удалённый вебдрайвер с нужными настройками.


(Pavel) #6

Спасибо, не знал)
А как тогда указывать браузер и его версию?


(Дмитрий Хижов) #7

Вон оно как! Спасибо! А есть где то дока где подобные вещи описаны? Я например слышал про то что setValue вызывает под капотом clear() sendKeys(). А click() проверяет элемент на visible. Где это все можно пощупать не нашел ( буду благодарен за любую информацию


(Pavel) #8

sendKeys не вызывает clear, более того, clear не всегда работает.
click() проверяет, как и другие функции действий у элементов.
Пощупать вы можете на любом сайте, который будете автоматизировать. Или что вы имеете ввиду?


(Дмитрий Хижов) #9

Про setValue я прочитал здесь в 9 посте

Appium (Android) + Selenide, инициализация драйвера

Про click() от коллеги услышал. Пощупать я имею ввиду найти подтверждение/ опровержение этому в коде или доке. Если это действительно есть, интересно знать как работают под капотом другие методы, чтобы не делать лишних действий в будущем.
В коде видимо вот реализация:

http://joxi.ru/v29E6VPszqBdd2

UPD
Это прекрасно работает, и решило все мои проблемы! Спасибо за это еще раз:)

Configuration.remote=seleniumUrl
Configuration.browserCapabilities.setCapability("enableVNC", true);

(asolntsev) #10

Ну как, есть стандартный javadoc.

Правда, всегда есть риск, что какие-то из интересующих вас нюансов и там не будут описанных - но такой риск есть и с любой другой документацией. В этом и есть фундаментальная проблема документации.

Для таких случаев всегда есть исходники. В IDEA их очень удобно смотреть.


(Pavel) #11

У меня получилось вот так. Такой вариант мне больше нравится

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setBrowserName("chrome");
        capabilities.setVersion("80.0");
        capabilities.setCapability("enableVNC", true);
        capabilities.setCapability("enableVideo", false);
        capabilities.setCapability("acceptInsecureCerts", true);

        LoggingPreferences logPrefs = new LoggingPreferences();
        logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
        capabilities.setCapability("goog:loggingPrefs", logPrefs);        

        Configuration.remote = "http://" + HOST_HUB + ":4444/wd/hub";
        Configuration.screenshots = false;        
        Configuration.browserCapabilities = capabilities;
        Configuration.browserSize = "1920x1080";
        Configuration.browserPosition = "2x2"; 

Аналогично можно заменить на это. Но здесь получается длиннее и не так читаемо. Верхний вариант мне больше нравится. Но это наверное дело вкуса уже

        Configuration.remote = "http://" + HOST_HUB + ":4444/wd/hub";
        Configuration.screenshots = false;
        Configuration.browserCapabilities.setBrowserName("chrome");
        Configuration.browserCapabilities.setVersion("80.0");
        Configuration.browserCapabilities.setCapability("enableVNC", true);
        Configuration.browserCapabilities.setCapability("enableVideo", false);
        Configuration.browserCapabilities.setCapability("acceptInsecureCerts", true);
        Configuration.browserCapabilities.setCapability("goog:loggingPrefs", logPrefs);*/
        Configuration.browserCapabilities = capabilities;
        Configuration.browserSize = "1920x1080";
        Configuration.browserPosition = "2x2";