Java selenium中的隐式等待是否仅用于元素搜索?
我想了解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秒钟,
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;
}