driver.manage()。timeouts()。implicitlyWait(10000,TimeUnit.SECONDS)是否仅用于元素搜索?

时间:2015-04-12 15:24:17

标签: java unit-testing selenium testng load-testing

我想知道使用的 driver.manage()。timeouts()。implicitlyWait(10000,TimeUnit.SECONDS);

它是仅用于元素搜索还是用于页面加载和刷新等任何其他目的?

我在驱动程序初始化的开始使用它。

但是在我的应用程序中我想在输入错误的密码后检查错误消息,但是一旦我输入错误的密码,它将离开页面并且不会在同一页面上等待错误消息。它将初始化/只加载一次页面,当我使用Thread.sleep(3)时,它在页面停止3秒并正确读取错误信息。

但我不想使用Thread.sleep,因为我已经在使用driver.manage()。timeouts()。implicitlyWait(0,TimeUnit.SECONDS)

有谁能告诉我它的用途以及我如何解决这个错误?

代码段:(不工作,返回FAILURE) (没有Thread.sleep)

 setText(WebElements.TEXT_BOX, PASSWORD);
    click(WebElements.SUBMIT_BUTTON);
           //Thread.sleep(3000);
            if (isElementPresent(WebElements.ERROR_MESSAGE)) {
                          return SUCCESS;
      }
            else 
                    return FAILURE;

3 个答案:

答案 0 :(得分:1)

隐式显式等待的主要区别在于隐式等待轮询 DOM 定义的时间量(比方说10s) )并查找元素,而显式等待周期性地将请求发送到服务器并检查DOM中的元素。

隐式等待是坚定的并且固定在驱动程序实例上。因此,一旦设置了该时间,就会为整个驱动程序实例设置并应用于所有地方。有了这个,当你使用任何命令来查找一个元素时,它会轮询DOM定义的时间,而不会定期与服务器/发送另一个请求,如果没有找到,最后会抛出异常。< / p>

另一方面,除非明确覆盖,否则显式等待有default time 500毫秒的睡眠时间。这意味着它在间隔和休眠之间充当Thread.sleep(); 500ms,然后将请求发送到服务器并定期检查您定义的元素和条件,并定义轮询间隔并达到超时。

因此,在您的情况下,Thread.Sleep()正在作为显式等待。正确的解决方案当然是使用 Explicit 等待并定期检查元素及其预期条件。

setText(WebElements.TEXT_BOX, PASSWORD);
WebDriverWait wait = new WebDriverWait(driver,10);

try{

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("id of the element to be located")));
    return SUCCESS;
}
catch (NoSuchElementException exception)
{
    return FAILURE;
}

答案 1 :(得分:-1)

首先点击一下。然后页面改变了。在调用isElementPresent()之前,如果页面已经加载,你怎么知道?

最好不要使用implicitlyWait()而不是sleep()。使用FluentWait: https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html

FluentWait会定期检查您的情况是否为&#34;为真&#34;。如果没有(例如,如果页面尚未完全加载),则等待一段时间并再次检查。

答案 2 :(得分:-1)

我建议你使用下面给出的显式等待

int wait = 10;
WebDriverWait WAIT = new WebDriverWait(driver,wait);
try{
    WAIT.until(ExpectedConditions.presenceOfElementLocated(By.id("id of element")));
    return SUCCESS;
}
catch (NoSuchElementException exception)
{
    return FAILURE;
}
隐性,明确和差异之间的差异

流利等待您可以找到here