driver.manage.wait(长超时)和显式等待之间的区别

时间:2018-01-20 12:52:05

标签: java selenium selenium-webdriver wait webdriverwait

有人可以说使用的区别是:

driver.manage().wait(long timeout)

WebDriverWait wait = new WebDriverWait(driver, WAIT_IN_SECONDS) 

(EXPLICIT WAIT)了解我将来的参考资料。

请原谅我在自动化方面对我自己的新蜜蜂的问题很愚蠢。

它是显式等待的简单形式吗?

3 个答案:

答案 0 :(得分:0)

driver.manage.wait(long timeout)

driver.manage.wait(long timeout) 实际上来自java.lang.Object.wait()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.

返回值

This method does not return a value.

用法

在一个参数版本中,中断和虚假唤醒是可能的,因此该方法应始终在循环中使用,如下所示:

 synchronized (obj) {
     while (<condition does not hold>)
         obj.wait();
     ... // Perform action appropriate to condition
 }

此方法只能由作为此对象监视器所有者的线程调用。

异常

抛出:

  • InterruptedException :如果另一个线程中断了当前线程。抛出此异常时,将清除当前线程的中断状态。
  • IllegalArgumentException :如果超时值为负。
  • IllegalMonitorStateException :如果当前主题不是对象监视器的所有者。

Explicit Wait

Explicit Wait 是您为WebDriver实例定义,配置和实现的代码块,以便在继续下一行代码之前等待满足某个条件。有一些方法可以帮助我们实现只在需要时才会等待的ExplicitWait。 WebDriverWait与ExpectedCondition结合使用是ExplicitWait可以实现的方式之一。

您可以在质量保证Replace implicit wait with explicit wait (selenium webdriver & java)

中找到关于 Explicit Wait 及其实施的详细讨论

回答此问题

obj.wait() WebDriverWait 无关。 obj.wait() 处理线程级别的内部逻辑,其中 WebDriverWait HTML DOM范围内处理

答案 1 :(得分:0)

有不同的方法让硒等待。 Inlicit和Explicit以及另一种更高级的等待形式是Fluent Wait。

答案 2 :(得分:0)

隐含等待

@('D:/NewFolder','D:/NewFolder1/NewFolder_app','D:/NewFolder1/NewFolder_app_pool','C:/NewTestFolder101') | foreach {New-Item -Path $_ -ItemType Directory -Force}

隐式等待将告诉Web驱动程序在抛出异常之前等待一段时间。明确等待时间应用于脚本中的所有元素。隐式等待的缺点是,即使页面也是如此并且在时间单位之前加载元素,Webdriver保持执行直到达到该时间。

明确等待

显式等待用于告诉Web驱动程序在抛出异常之前等待某些条件(预期条件)或超过最大时间。显式等待是一种智能等待,但它只能应用于指定的元素。显式等待提供比隐式等待更好的选项,因为它将等待动态加载的元素。

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

请参阅此链接了解更多信息: https://www.guru99.com/implicit-explicit-waits-selenium.html