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