用显式等待替换隐式等待(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
实例定义,配置和实现的代码块,以便在继续下一行代码之前等待满足某个条件。 有一些方法可以帮助我们实现只在需要时才会等待的ExplicitWait
。 WebDriverWait
与ExpectedCondition
结合使用是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 Framework
对implicitlyWait()
所有调用。 开始一个新的执行,并观察您面对元素属性的exception的位置。 我们将面临的例外情况将是以下之一:
-
NoSuchElementException
-
ElementNotVisibleException
-
ElementNotSelectableException
现在,我们需要确认我们需要等待的WebElement
的特定属性。 如果要单击要考虑的WebElement
,我们会将Expected Conditions
视为elementToBeClickable(locator)
Element is Clickable
– 在显示和启用元素时实现。
Note
: 不要混合implicit and explicit waits
。 这样做会导致unpredictable wait times
。 例如,设置10秒的隐式等待和15秒的显式等待可能导致20秒后发生超时。