如何用明确的等待替换此隐式等待?
driver = new ChromeDriver(功能);
driver.manage()deleteAllCookies();
driver.manage()。timeouts()。implicitlyWait(10,TimeUnit.SECONDS);
这在Before Method中使用。我能够替换代码中的所有Thread.sleep(),但我不知道该怎么做。
答案 0 :(得分:1)
隐含等待是在driver
生命周期的driver
初始化后立即定义的,它设置了driver
看待对方WebElement
的最长时间。
明确等待用于等待WebElement
处于克里汀状态的给定时间,并且每次等待条件满足时都需要使用。
你无法替换"带有显式等待的隐式等待定义,因为它们是不同的东西,并且在这一点上没有条件等待。
答案 1 :(得分:0)
一旦声明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
答案 2 :(得分:0)
ExplicitWait
:根据documentation here, ExplicitWait
是您为 WebDriver
实例定义,配置和实施的代码块在继续下一行代码之前等待某个条件得到满足。有一些方法可以帮助我们实施只需要等待的 ExplicitWait
。 WebDriverWait
与 ExpectedCondition
相结合,可以实现 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或非null对象。
在为Testing Web/Mobile Applications
自动化Web浏览器时,经常会遇到一些情况。 Java,C#和Python绑定包括那些方便的方法,因此我们不必自己编写 ExpectedCondition
类,也不必为它们创建自己的实用程序包。一些 Expected Conditions
是:
alertIsPresent()
强> elementToBeClickable(locator)
强> elementToBeSelected(WebElement)
强> frameToBeAvailableAndSwitchToIt(locator)
强> invisibilityOf(element)
强> 您可以找到Expected Conditions
here支持的所有方法。
ExplicitWait
:要诱导 ExplicitWait
,首先您必须删除 implicitlyWait()
<中 Test Framework
的所有来电/ strong>即可。开始一个新的执行,并观察您面对元素属性的异常。我们将面临的例外情况之一是:
NoSuchElementException
强> ElementNotVisibleException
强> ElementNotSelectableException
强> 现在,我们需要确认我们需要等待的 WebElement
的特定属性。如果要点击 WebElement
,我们会将 Expected Conditions
视为 elementToBeClickable(locator)
Element is Clickable
- 在元素显示并启用时实施。
Note
:不要混用implicit and explicit waits
。这样做会导致unpredictable wait times
。例如,设置10秒的隐式等待和15秒的显式等待可能会导致20秒后发生超时。
答案 3 :(得分:0)
使用隐式和显式等待。
尽管我们认为显式等待是更明智的选择,但您应该检查适合您的情况。
例如,在您的代码中,您正在调用等待只是为了获得删除调用完成的时间。无需任何等待就可以改进。
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();
因此,如果可以验证执行条件,请不要等待,而在知道要等待什么时使用显式等待。希望这会有所帮助。
答案 4 :(得分:-1)
隐式等待设置一次并在驱动程序实例的整个生命周期中应用,因此该行没有真正的替代品。您应该删除它,因为您不希望混合隐式和显式等待according to the official docs。
警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。
删除该行后,您需要运行脚本并在需要等待的区域添加显式等待。