WebDriver API表示使用findElements
来检查WebElement
是否存在。此方法受隐式超时值的限制。因此,如果我想编写一个检查存在的方法,并且我不希望该方法等待隐式超时,我可以像这样暂时禁止它:
protected boolean doesElementExist(By by) {
// Temporarily set the implicit timeout to zero
driver.manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS);
// Check to see if there are any elements in the found list
boolean exists = driver.findElements(by).size() > 0;
// Return to the original implicit timeout value
driver.manage().timeouts()
.implicitlyWait(Properties.TIMEOUT_TEST, TimeUnit.SECONDS);
return exists;
}
但这需要您WebDriver
来管理超时值。我目前正在将上述方法移动到By
的自定义子类Locator
中,以便我可以从驱动程序或特定的WebElement
调用这些方法,并且这样我也可以可以使用正则表达式匹配和其他形式的信息检索来扩展Locator
。
问题是,在我的Locator
课程中,我没有WebDriver
,我有SearchContext
。我想应该有一种方法可以在findElements
的上下文中改变超时 - 或者使用自定义超时调用WebElement
之类的东西。有这样的方式吗?或者,我是否必须在我的自定义WebDriver
和WebElement
实现(为了使这些新方法可用)中实现这些方法的实现中抑制超时值?谢谢!