[英]Which wait is more preferred in selenium Webdriver using Java? (Implicit or Explicit)
[英]Replace implicit wait with explicit wait (selenium webdriver & java)
如何用显式等待替换这种隐式等待?
驱动程序 = 新的 ChromeDriver(功能);
driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
这在 Before 方法中使用。 我能够替换代码中的所有 Thread.sleep(),但我不确定对这个做了什么。
隐式等待在driver
初始化后立即定义为driver
生命周期,它设置driver
查找敌人WebElement
的最长时间。
显式等待用于等待WebElement
处于 cretin 条件的给定时间量,并且需要在每次等待条件满足时使用。
你不能用显式等待“替换”隐式等待定义,因为它们是不同的东西,在这一点上没有条件等待。
根据文档, ExplicitWait是您为WebDriver实例定义、配置和实现的代码块,以在继续执行下一行代码之前等待满足特定条件。 有一些方法可以帮助我们实现ExplicitWait只在需要时等待。 WebDriverWait与ExpectedConditions相结合是可以实现ExplicitWait的方法之一。
driver.get("http://www.example.com/");
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css"))).click();
ExplicitWait 的这个实现在抛出TimeoutException之前最多等待 10 秒,或者如果它找到了元素,那么它将在0
到10
秒内返回。 WebDriverWait默认每500
毫秒调用一次ExpectedCondition,直到它成功返回。 ExpectedCondition函数类型的成功返回值是Boolean
值 true 或非空对象。
在自动化 Web 浏览器以测试 Web/移动应用程序时,经常会遇到一些情况。 Java、C# 和 Python 绑定包括这些方便的方法,因此我们不必自己编写ExpectedCondition类或为它们创建我们自己的实用程序包。 一些预期条件是:
alertIsPresent()
elementToBeClickable(locator)
elementToBeSelected(WebElement)
frameToBeAvailableAndSwitchToIt(locator)
invisibilityOf(element)
在这里您可以找到有关预期条件支持的所有方法。
要引入ExplicitWait
,首先您必须删除Test Framework
中所有对implicitlyWait()
的调用。 开始新的执行并观察元素属性的异常在哪里。 我们将面临的例外情况是以下之一:
NoSuchElementException
ElementNotVisibleException
ElementNotSelectableException
现在,我们需要确认需要等待的WebElement的特定属性。 如果要单击考虑中的WebElement ,我们会将预期条件视为elementToBeClickable(locator)
。
Element is Clickable意味着Element is Displayed and Enabled 。
不要混合隐式和显式等待。 这样做会导致不可预测的等待时间。 例如,设置 10 秒的隐式等待和 15 秒的显式等待,可能会导致在 20 秒后发生超时。
一旦您声明了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
隐式等待设置一次并在驱动程序实例的整个生命周期中应用,因此该行没有真正的替代品。 您应该删除它,因为您不想根据官方文档混合隐式和显式等待。
警告:不要混合隐式和显式等待。 这样做可能会导致不可预测的等待时间。
删除该行后,您将需要运行脚本并在需要等待的区域添加显式等待。
使用隐式和显式等待。
虽然我们权衡了显式等待更可取,但您应该检查您正在迎合的场景。
例如,在您的代码中,您调用等待只是为了获得完成删除调用的时间。 可以在不使用任何等待的情况下进行改进。
Set<Cookie> cookies = driver.manage().getCookies();
for(;cookies.size() != 0;){
driver.manage().deleteAllCookies();
}
**我想你可以使用While循环**
话虽如此,使用显式等待。 我已经用它来对弹出窗口采取行动,这是我在应用程序测试期间得到的。
WebDriverWait wait = new WebDriverWait(appDriver, 10);
wait.until(ExpectedConditions.alertIsPresent());
appDriver.switchTo().alert().dismiss();
因此,如果您可以验证执行条件,请使用不等待,并在您知道要等待什么时使用显式等待。 希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.