用显式等待替换隐式等待(selenium webdriver&java)

如何用显式替换这个隐式等待?

driver = new ChromeDriver(function);

。driver.manage()deleteAllCookies();

driver.manage()。timeouts()。implicitlyWait(10,TimeUnit.SECONDS);

这在Before Method中使用。 我能够替换代码中的所有Thread.sleep(),但我不知道该怎么做。

隐式等待是在driver初始化driver生命周期后立即定义的,它设置driver查看对象WebElement的最长时间。

显式等待用于等待WebElement处于克里汀状态的给定时间量,并且每次等待条件满足时都需要使用。

你不能用显式等待“替换”隐式等待定义,因为它们是不同的东西,在这一点上没有条件等待。

一旦你声明implicitlyWait ,它将通过脚本运行应用于你的所有元素。 因此,最初声明它以防止脚本失败。

现在,如果有需要显式等待的元素,那么只需在执行某些操作之前声明它或使用相同的引用。 显式等待不像implicitlyWait那样应用。

示例: –

 WebElement seleniumlink; seleniumlink= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='add_files_btn']"))); seleniumlink.click(); 

请参阅以下链接了解更多详情: –

https://www.guru99.com/implicit-explicit-waits-selenium.html

隐式等待设置一次并应用于驱动程序实例的整个生命周期,因此该行没有真正的替代品。 您应该删除它,因为您不希望根据官方文档混合隐式和显式等待。

警告:不要混合隐式和显式等待。 这样做会导致不可预测的等待时间。

删除该行后,您将需要运行脚本并在需要等待的区域中添加显式等待。

什么是ExplicitWait

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

一个例子:

 import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; . . . WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath"))); element.click(); 

说明:

ExplicitWait这个实现在抛出TimeoutException之前等待最多10秒,或者如果它找到该元素,那么它将在0到10秒内返回。 默认情况下, WebDriverWait每500毫秒调用一次ExpectedCondition直到它成功返回。 ExpectedCondition函数类型的成功返回值是Boolean值true或非null对象。

预期条件:

在自动化用于Testing Web/Mobile Applications Web浏览器时,会遇到一些经常遇到的情况。 Java,C#和Python绑定包括那些方便的方法,因此我们不必自己编写ExpectedCondition类或为它们创建我们自己的实用程序包。 一些Expected Conditions是:

  • alertIsPresent()
  • elementToBeClickable(locator)
  • elementToBeSelected(WebElement)
  • frameToBeAvailableAndSwitchToIt(locator)
  • invisibilityOf(element)

您可以在此处找到Expected Conditions支持的所有方法。

诱导ExplicitWait

要引发ExplicitWait ,首先必须删除Test FrameworkimplicitlyWait()所有调用。 开始一个新的执行,并观察您面对元素属性的exception的位置。 我们将面临的例外情况将是以下之一:

  • NoSuchElementException
  • ElementNotVisibleException
  • ElementNotSelectableException

现在,我们需要确认我们需要等待的WebElement的特定属性。 如果要单击要考虑的WebElement ,我们会将Expected Conditions视为elementToBeClickable(locator)

Element is Clickable在显示和启用元素时实现


Note不要混合 implicit and explicit waits 。 这样做会导致unpredictable wait times 。 例如,设置10秒的隐式等待和15秒的显式等待可能导致20秒后发生超时。

Interesting Posts