driver.manage.wait(长时间超时)和显式等待之间的区别
Difference between driver.manage.wait(long timeout) and Explicit wait
谁能说说 :
的不同用法
driver.manage().wait(long timeout)
和
WebDriverWait wait = new WebDriverWait(driver, WAIT_IN_SECONDS)
(EXPLICIT WAIT) 了解我未来的参考资料。
请原谅我的问题对我这个自动化新手来说很愚蠢。
是显式等待的简单形式吗?
driver.manage.wait(long timeout)
driver.manage.wait(long timeout)
实际上是 java.lang.Object.wait()
method is from the java.lang.Object
Class
导致当前线程等待,直到另一个线程调用 notify()
方法或 notifyAll()
此对象的方法或指定的时间量已经过去。当前线程必须拥有该对象的监视器。该线程释放此监视器的所有权并一直等待,直到另一个线程通过调用 notify 方法或 notifyAll 方法通知在此对象的监视器上等待的线程唤醒。然后线程等待,直到它可以重新获得监视器的所有权并恢复执行。
声明
java.lang.Object.wait()
方法声明如下:
public final void wait() throws InterruptedException
{
//code logic
}
参数
timeout - the maximum time to wait in milliseconds.
Return 值
This method does not return a value.
用法
在单参数版本中,中断和虚假唤醒是可能的,因此应始终在循环中使用此方法,如下所示:
synchronized (obj) {
while (<condition does not hold>)
obj.wait();
... // Perform action appropriate to condition
}
此方法只能由作为此对象监视器所有者的线程调用。
异常
抛出:
InterruptedException
:如果另一个线程中断了当前线程。抛出该异常时清除当前线程的中断状态。
IllegalArgumentException
:如果timeout的值为负数。
IllegalMonitorStateException
: 如果当前线程不是对象的监视器的所有者。
Explicit Wait
Explicit Wait
是你为WebDriver实例定义、配置和实现的代码块,等待满足某个条件再进行下一行代码。有一些方法可以帮助我们实现 ExplicitWait,它只会在需要时等待。 WebDriverWait 结合 ExpectedCondition 是实现 ExplicitWait 的方法之一。
您可以在 Explicit Wait
上找到详细的讨论及其在 QA Replace implicit wait with explicit wait (selenium webdriver & java)
中的实现
回答这个问题
obj.wait()
与WebDriverWait
没有关系。 obj.wait()
处理线程级别的内部逻辑,而 WebDriverWait
在 [=68= 的范围内处理]HTML DOM
.
有多种方法可以在 selenium 中放置等待。隐式和显式等待的另一种高级形式是 Fluent Wait。
隐式等待
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
隐式等待会告诉 web 驱动程序在它抛出一个 exception.Implicit 等待一定时间之前等待一段时间 script.The 隐式等待的缺点是也就是说,即使页面和元素在时间单位之前加载,Webdriver 也会保持执行直到达到该时间。
显式等待
显式等待用于告诉 Web 驱动程序等待特定条件(预期条件)或在抛出之前超过的最长时间 exception.The 显式等待是一种智能等待,但它可以是仅适用于指定元素。显式等待比隐式等待提供更好的选择,因为它将等待动态加载的元素。
WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("*xpath*")));
el.click();
请参阅此 link 了解更多信息:
https://www.guru99.com/implicit-explicit-waits-selenium.html
谁能说说 :
的不同用法driver.manage().wait(long timeout)
和
WebDriverWait wait = new WebDriverWait(driver, WAIT_IN_SECONDS)
(EXPLICIT WAIT) 了解我未来的参考资料。
请原谅我的问题对我这个自动化新手来说很愚蠢。
是显式等待的简单形式吗?
driver.manage.wait(long timeout)
driver.manage.wait(long timeout)
实际上是 java.lang.Object.wait()
method is from the java.lang.Object
Class
导致当前线程等待,直到另一个线程调用 notify()
方法或 notifyAll()
此对象的方法或指定的时间量已经过去。当前线程必须拥有该对象的监视器。该线程释放此监视器的所有权并一直等待,直到另一个线程通过调用 notify 方法或 notifyAll 方法通知在此对象的监视器上等待的线程唤醒。然后线程等待,直到它可以重新获得监视器的所有权并恢复执行。
声明
java.lang.Object.wait()
方法声明如下:
public final void wait() throws InterruptedException
{
//code logic
}
参数
timeout - the maximum time to wait in milliseconds.
Return 值
This method does not return a value.
用法
在单参数版本中,中断和虚假唤醒是可能的,因此应始终在循环中使用此方法,如下所示:
synchronized (obj) {
while (<condition does not hold>)
obj.wait();
... // Perform action appropriate to condition
}
此方法只能由作为此对象监视器所有者的线程调用。
异常
抛出:
InterruptedException
:如果另一个线程中断了当前线程。抛出该异常时清除当前线程的中断状态。IllegalArgumentException
:如果timeout的值为负数。IllegalMonitorStateException
: 如果当前线程不是对象的监视器的所有者。
Explicit Wait
Explicit Wait
是你为WebDriver实例定义、配置和实现的代码块,等待满足某个条件再进行下一行代码。有一些方法可以帮助我们实现 ExplicitWait,它只会在需要时等待。 WebDriverWait 结合 ExpectedCondition 是实现 ExplicitWait 的方法之一。
您可以在 Explicit Wait
上找到详细的讨论及其在 QA Replace implicit wait with explicit wait (selenium webdriver & java)
回答这个问题
obj.wait()
与WebDriverWait
没有关系。 obj.wait()
处理线程级别的内部逻辑,而 WebDriverWait
在 [=68= 的范围内处理]HTML DOM
.
有多种方法可以在 selenium 中放置等待。隐式和显式等待的另一种高级形式是 Fluent Wait。
隐式等待
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
隐式等待会告诉 web 驱动程序在它抛出一个 exception.Implicit 等待一定时间之前等待一段时间 script.The 隐式等待的缺点是也就是说,即使页面和元素在时间单位之前加载,Webdriver 也会保持执行直到达到该时间。
显式等待
显式等待用于告诉 Web 驱动程序等待特定条件(预期条件)或在抛出之前超过的最长时间 exception.The 显式等待是一种智能等待,但它可以是仅适用于指定元素。显式等待比隐式等待提供更好的选择,因为它将等待动态加载的元素。
WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("*xpath*")));
el.click();
请参阅此 link 了解更多信息: https://www.guru99.com/implicit-explicit-waits-selenium.html