是否可以通过Java在Selenium中使用没有预期条件的WebDriverWait?

时间:2019-02-27 17:24:43

标签: java selenium lambda pageload webdriverwait

我有一个正在使用黄瓜/硒进行前端测试的项目。有人告诉我使用WebDriverWait而不是Mail::to($request->user()) ->queue(new OrderShipped($order)); 来完成测试。但是,在这种情况下,我不是在寻找预期的条件。我确实需要在页面加载时暂停测试。如果它在等待之前搜索xPath,它将在搜索中单击第一项并继续测试错误的内容。

3 个答案:

答案 0 :(得分:1)

对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#+硒

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);
}

答案 1 :(得分:1)

如果打算在页面加载期间需要暂停测试的情况下使用WebDriverWait而不使用任何ExpectedConditions,则还可以使用 Java <components:ListItemView ListItem="{Binding Instance}" /> 表达式如下:

lambda

答案 2 :(得分:1)

为什么需要暂停巡回测试?

如果需要等待,直到可见元素,请使用:curl -X POST "https://slack.com/api/chat.postMessage" -H "accept: application/json" -d token=BOT_ACCESS_TOKEN -d channel=U0G9QF3C6 -d text=Hello -d as_user=true

如果您需要等待,直到可以单击元素,即可使用:new WebDriverWait(WebDriver driver, String timeToWait).until(ExpectedConditions.visibilityOf(WebElement element));

如果需要等待,直到DOM上出现元素,请使用:new WebDriverWait(WebDriver driver, String timeToWait).until(ExpectedConditions.elementToBeClickable(WebElement element));

使用Thread.sleep()或在指定时间内暂停测试是一种不好的做法。