4

Как заявил Selenium Documentation мы никогда не должны смешивать явно и неявные раз ожидания:Проверка на элемент, чтобы быть интерактивными без явного времени ожидания

ПРЕДУПРЕЖДЕНИЕ: Не смешивать неявный и явное ожидание. Это может привести к непредсказуемым временам ожидания. Например, установка неявного ожидания 10 секунд и явное ожидание 15 секунд может вызвать таймаут после 20 секунд.

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

Я знаю, что это можно сделать, используя ExpectedConditions, но это подразумевает явное время ожидания, как в приведенном ниже примере.

protected PageNewDocument isElementClickable(WebElement element) 
{ 
    (new WebDriverWait(driver, 1)).until(ExpectedConditions.elementToBeClickable(element)); 
    return this; 
} 

Как проверить элементы, которые можно щелкнуть, без определения явного времени ожидания?

+0

Что такое проблема для использования неявного ожидания? –

+0

@HelpingHands Вы имеете в виду, какова цель неявного времени ожидания? Некоторый контент get перезагружается динамически, поэтому он может быть недоступен сразу из-за задержек. С неявным временем ожидания мне не нужно заботиться о динамическом контенте. –

+0

Нет, я имею в виду, вы сказали, что используете неявное время ожидания 5000 мс, так что это не работает? –

ответ

0

Ответил аналогичный вопрос here на днях. Этот метод ожидает загрузки страницы перед возвратом true. Поэтому тогда ваши элементы должны быть интерактивными.

private static WebDriverWait wait = new WebDriverWait(driver, 60); 
private static JavascriptExecutor js = (JavascriptExecutor) driver; 

public static void waitForPageLoaded() { 
      wait.until(new ExpectedCondition<Boolean>() { 
       public Boolean apply(WebDriver driver) { 
        Boolean res = (js.executeScript("return document.readyState").equals("complete")); 
        System.out.println("[DEBUG] waitForPageLoaded: " + res); 
        return res; 
      } 
    }); 
} 
+2

Да, это правильно, но вы все еще определяете явное время ожидания здесь: 'private static WebDriverWait wait = new WebDriverWait (driver, 60);' –

 Смежные вопросы

  • Нет связанных вопросов^_^