2014-01-06 26 views
1

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

在检查与页面和其上的数据列表中的文件,我发现一些网页进行匹配了错误的数据。当我调试时,一切都正常工作,但一旦我让程序运行几页,它就开始从错误的页面再次获取数据。 (为了澄清,例如,如果我做了driver.get(www.google.com),其次为driver.get(www.stackoverflow.com),然后做driver.findElements()拿到StackOverflow上的网页标题,它将返回“谷歌”)。

当密切关注浏览器中运行,但在我看来,有是url框中的url和实际显示的页面之间的不匹配。网页的变化比页面快得多。我怀疑发生了什么事情是驱动程序没有等到页面完全加载之后再调用findElements,因此从前一页获取具有相同类名称的元素。

这使得给予什么webdriver.load.strategy“稳定”是应该做的,但我设置一个等待页面上的元素,它似乎并没有在等待着某种意义。是否因为每个页面都有相同的元素,所以元素已经可见了?我不能在别的等待,因为所有的页面有相同的设置 - 这只是个别文字是不同的,我不知道这是什么将提前。

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

感谢, BSG 编辑 我加入一些代码,即使代码完美的作品时webdriver.load.strategy“稳定”未设置。

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 = elementclassname的元素。

+0

这看起来像一个示例代码,那么你为什么不张贴在这里? –

+0

你在等什么?这似乎是真正的问题。 –

回答

1

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

我觉得你的假设是正确的。

几乎相同的是写在description of unstable strategy

有测试功能,让Firefox不等待完整页面加载调用。获得或之后。点击。这可能会导致立即找到的突破,因此请务必使用一个隐性或显性等待太久。

作为(不太好看)的解决方法,您可以参考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,会出现一个空白页面,它会需要等待一个元素显示在页面上。

+0

有趣的建议。我想知道它是否会比等待满负荷更快。另外,我已经完成了所有这些 - 例如,在urllist中的数字10-30都从第9位获得数据。我不知道这是否有助于这种情况。 – bsg

+0

我认为它会比满载更快,因为它需要驱动毫秒才能到达本地空白页面。找出答案的唯一方法就是尝试。 :) –

+0

是的,我想通了。 :)将尽力让你知道它是否有效。如果有,我会接受你的答案。谢谢! – bsg

相关问题