Java selenium中的隐式等待是否仅用于元素搜索?

Java selenium中的隐式等待是否仅用于元素搜索?,java,unit-testing,selenium,testng,load-testing,Java,Unit Testing,Selenium,Testng,Load Testing,我想了解selenium中隐式等待的用法 driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS); 它是否仅用于元素搜索或任何其他用途,如页面加载和刷新?和往常一样,我在驱动程序初始化的开始使用它 但在我的应用程序中,我想在输入错误的密码后检查错误消息,但一旦输入错误的密码,它将离开页面,而不会等待同一页面上的错误消息。它是否只初始化/加载页面一次?。当我使用Thread.sleep(3)时,它会在页面上停留3秒钟,

我想了解selenium中隐式等待的用法

driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
它是否仅用于元素搜索或任何其他用途,如页面加载和刷新?和往常一样,我在驱动程序初始化的开始使用它

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

但是我不想使用Thread.sleep,因为我已经在使用隐式等待

有人能告诉我它的用途吗?我如何解决这个错误

下面的代码段:(不工作,返回失败) (没有线程。睡眠)


首先你做一些点击。然后页面改变。在调用isElementPresent()之前,如何知道页面是否已加载

最好不要隐式使用wait()而不是sleep()。使用FluentWait:


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

隐式等待和显式等待之间的主要区别在于隐式等待在定义的时间(比如10秒)内轮询DOM并查找元素,而显式等待会定期向服务器发送请求并检查DOM中的元素

隐式等待是固定的,并固定到驱动程序实例。因此,一旦设置了该时间,它将为整个驱动程序实例设置,并应用于所有地方。在这种情况下,当您使用任何命令查找元素时,它会轮询DOM指定的时间,而不与服务器通信/定期发送另一个请求,如果没有找到,则最终抛出异常

另一方面,显式等待有500毫秒的睡眠时间,除非您显式重写它。意思是它充当
Thread.sleep()在间隔和休眠之间500毫秒,然后将请求发送到服务器,并定期检查您定义的元素和条件(已定义轮询间隔),并达到超时

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

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

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

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;
}
隐式、显式和流畅等待之间的区别

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