FirefoxDriver webdriver.load.strategy 不稳定 findelements 从错误页面获取元素

2023-12-11

我在一个应用程序中使用 FirefoxDriver,该应用程序可以快速浏览几个相似但不相同的页面。为了加快执行速度(我需要使用 FF),我将 webdriver.load.strategy 属性设置为“不稳定”。这确实通过不完全加载页面来加快速度,但我发现了一个非常奇怪的错误。

在检查包含页面列表及其数据的文件时,我发现某些页面与错误的数据匹配。当我调试时,单步执行时一切正常,但是一旦我让程序运行几页,它就开始再次从错误的页面获取数据。 (澄清一下,例如如果我做了driver.get(www.google.com), 其次是driver.get(www.stackoverflow.com),然后做driver.findElements()获取 StackOverflow 页面标题,它将返回“Google”。)

当仔细观察浏览器运行时,我发现网址框中的网址与实际显示的页面不匹配。网址的变化速度比页面的变化速度快得多。我怀疑发生的情况是驱动程序没有等到页面完全加载后再调用 findElements,因此从前一页获取具有相同类名的元素。

考虑到 webdriver.load.strategy 'stable' 应该做的事情,这是有道理的,但我在页面上的元素上设置了等待,但它似乎没有等待。难道是因为每个页面都有相同的元素,所以该元素已经可见了?我不能等待其他任何事情,因为所有页面都有相同的设置 - 只是个别文本不同,而且我事先不知道会是什么。

有人遇到过这个问题吗?我对导致问题的原因的假设是否正确?除了删除不稳定的负载策略之外,我还能做些什么吗?

谢谢, BSGEDIT我正在添加一些代码,即使在未设置 webdriver.load.strategy 'stable' 时代码也可以完美运行。

for(String url : urllist)
{
  driver.get(url);
  WebElement header = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.tagName("h1")));
  elements = driver.findElements(By.className(elementclassname));
}

请注意,每个页面上都有一个 h1 和几个带有 class=element classname 的元素。


我怀疑发生的情况是驱动程序没有等到页面完全加载后再调用 findElements,因此从前一页获取具有相同类名的元素。

我认为你的假设是正确的。

里面写的也差不多的描述unstable战略:

有一个测试功能可以使 Firefox 在调用 .get 或 .click 后不等待整个页面加载。这可能会导致立即查找中断,因此请务必使用隐式或显式等待。

作为(不太好看)的解决方法,您可以参考driver到不包含该元素的页面presenceOfElementLocated()(例如,空白页)。

就像是:

for(String url : urllist)
{
  driver.get(url);
  WebElement header = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.tagName("h1")));
  elements = driver.findElements(By.className(elementclassname));
  driver.get("about:blank"); // <<<<<<<<<<
}

所以,当driver到达一个新的url,将会有一个空白页面,并且需要等待元素出现在页面上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FirefoxDriver webdriver.load.strategy 不稳定 findelements 从错误页面获取元素 的相关文章