Могу ли я использовать WebDriverWait без ExpectedCondition в Selenium через Java? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть проект, над которым я работаю, используя Cucumber / Selenium для тестирования переднего плана.Мне сказали использовать WebDriverWait вместо Thread.sleep() для завершения тестирования.Однако в этом случае я не ищу ожидаемого состояния.Мне буквально нужен тест, чтобы сделать паузу во время загрузки страницы.Если он ищет xPath перед ожиданием, он щелкнет по первому элементу в поиске и продолжит тестировать неправильные вещи.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Если вы намереваетесь использовать WebDriverWait без использования ExpectedConditions , в то время как вам необходим тест для приостановки во время загрузки страницы, вы также можете использовать Java lambdaВыражение выглядит следующим образом:

new WebDriverWait(driver, 20)
        .until(d -> ((JavascriptExecutor)d).executeScript("return document.readyState")
            .equals("complete"));
0 голосов
/ 28 февраля 2019

Почему вам нужно приостановить тестовый тур?

Если вам нужно подождать, пока не будет виден элемент untli, используйте: new WebDriverWait(WebDriver driver, String timeToWait).until(ExpectedConditions.visibilityOf(WebElement element));

Если вам нужно подождать, элемент untli будет активирован по клику:new WebDriverWait(WebDriver driver, String timeToWait).until(ExpectedConditions.elementToBeClickable(WebElement element));

Если вам нужно подождать, при использовании DOM будет присутствовать элемент untli: webDriver.manage().timeouts().implicitlyWait(String timeToWait, TimeUnit.SECONDS);

Использование Thread.sleep () или приостановка теста на указанное время - это плохопрактика.

0 голосов
/ 27 февраля 2019

Используйте следующий метод с Java + Selenium:

public boolean  isPageReady(WebDriver driver){
   boolean readyStateComplete = false;
    while (!readyStateComplete){
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        readyStateComplete = executor.executeScript("return document.readyState").equals("complete");
    }
    return  readyStateComplete;
}

Для C # + Selenium :

private void WaitUntilDocumentIsReady(TimeSpan timeout){
    var javaScriptExecutor = WebDriver as IJavaScriptExecutor;
    var wait = new WebDriverWait(WebDriver, timeout);

    // Check if document is ready
    Func<IWebDriver, bool> readyCondition = webDriver => javaScriptExecutor
            .ExecuteScript("return (document.readyState == 'complete' && jQuery.active == 0)");
    wait.Until(readyCondition);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...