Заставить 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(),

Другие вопросы по тегам