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

问题描述 投票:3回答:5

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

driver = new ChromeDriver(功能);

。driver.manage()deleteAllCookies();

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

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

java selenium selenium-webdriver webdriverwait implicitwait
5个回答
1
投票

隐含等待是在driver初始化driver生命时间后立即定义的,它设置了driver看起来foe WebElement的最大时间。

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

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


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


0
投票

什么是ExplicitWait

根据documentation hereExplicitWait是一个代码块,您为WebDriver实例定义,配置和实现,以等待某个条件得到满足,然后再继续下一行代码。有一些方法可以帮助我们实现只需要等待的ExplicitWaitWebDriverWaitExpectedCondition的组合是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函数类型的成功返回值是true或非null对象的Boolean值。

预期条件:

在为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的调用。开始一个新的执行,并观察您面对元素属性的异常。我们将面临的例外情况将是以下任何一种情况:

  • NoSuchElementException
  • ElementNotVisibleException
  • ElementNotSelectableException

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

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


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


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();

因此,如果您可以验证执行条件,请不要等待,并在知道要等待的内容时使用显式等待。希望这个对你有帮助。


-1
投票

隐式等待设置一次并在驱动程序实例的整个生命周期中应用,因此该行没有真正的替代品。你应该删除它,因为你不想混合隐式和显式等待according to the official docs

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

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

© www.soinside.com 2019 - 2024. All rights reserved.