Заставить WebDriver ждать без ожидаемого условия
Java / Selenium WebDriver / Firefox
На странице есть текстовое поле ввода. Затем есть кнопка "Отправить" под ним. Как поле ввода, так и кнопка Отправить уже включены при загрузке страницы. После ввода текста в поле ввода, есть ли способ заставить WebDriver подождать "х" секунд, прежде чем нажать кнопку "Отправить", вместо того, чтобы щелкнуть сразу.
Я вижу вариант Thread.sleep (x), который, как я понимаю, неэффективен. Другой вариант - использовать новый WebDriverWait (драйвер, 'x') без ожидаемых условий (поскольку здесь нет ожидаемого условия, поскольку кнопка "Отправить" уже видна и доступна для нажатия). В этом контексте это то же самое, что использование Thread.sleep(x)? Есть ли другой вариант?
1 ответ
Селен ждет, рассчитанный на ожидание определенного состояния. Implicit wait
ожидает элемента в DOM в driver.findElement()
а также explicit wait
ждет ExpectedCondition
быть true
,
Однако, как только условия будут выполнены, код будет продолжен или, если условие не выполнено, будет сгенерировано исключение.
Вы можете сделать код "спать" без потока, используя некоторые манипуляции
WebDriverWait tempWait = new WebDriverWait(driver, 10); // define local/temp wait only for the "sleep"
try {
tempWait.until(ExpectedCondition); // condition you are certain won't be true
}
catch (TimeoutException) {
continue; // catch the exception and continue the code
}
// continue the code
Это приведет к тому, что код будет имитировать "сон" в течение 10 секунд (код не будет продолжаться, но tempWait.until
будет повторно проверять, если ExpectedCondition
был встречен).
Это грязная работа вокруг и даже менее эффективная, чем Thread.sleep()
, Если цель состоит в том, чтобы подождать некоторое время независимо от состояния сети, я рекомендую вам использовать Thread.sleep()
,