Selenium:带WebDriver的Firefox:页面加载问题

时间:2011-08-31 13:01:29

标签: selenium webdriver

SeleniumServer版本:2.5.0,Firefox版本:4.0.1

我遇到通过Ajax调用呈现“新问题”超链接的情况。页面加载完成后,我需要单击此超链接继续。我正在使用类似下面的东西等到链接出现然后点击它。

while (!(driver.findElement(By.xpath("//a[text()='New Question']")).isEnabled())) {
            Thread.sleep(1000);
}
driver.findElement(By.xpath("//a[text()='New Question']")).click();

这就像IE中的魅力一样。但是在Firefox中,没有点击链接。

这告诉我的是,Firefox正在告诉Selenium,当页面未完全加载时,页面已加载,而IE正在做正确的事情。

要检查点击是否真的发生了,我会在超链接的onclick上输入一个javascript:alert("Hello From Chandra");。弹出窗口出现在IE上,但不出现在Firefox上。

问题:我做错了什么/不合适吗?有解决方法吗?

感谢。 PS:如果您需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:3)

您不需要while循环,可以在初始化驱动程序时使用implicitlyWait。这将使驱动程序在抛出元素未找到异常之前轮询元素的存在90秒。

 driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
 driver.findElement(By.xpath("//a[text()='New Question']")).click();

答案 1 :(得分:0)

感谢Nilesh和prestomanifesto,但是在放入while循环之前我曾尝试'WebDriverWait'和'implicitlyWait'(它不能正常工作)并且它不起作用。我做了一些挖掘,并“似乎”找到了如下解决方案。页面完成加载后,会有一个“搜索”文本字段获得焦点。我使用'activeElement'来检查焦点是否“真正”设置。

 while (!driver.findElement(By.id("searchValue")).isEnabled()) {
            WebElement currActiveElement = driver.switchTo().activeElement();
            if (currActiveElement.getAttribute("id").equals("searchValue")) {
                break;
            }
            Thread.sleep(1000);
        }

答案 2 :(得分:0)

您仍然可以通过等待5-8秒的预期元素的存在(不等待可见性,isEnabled)然后发送window.stop()JS脚本(停止加载更多元素)而无需等待来加速脚本执行整个页面在5-8秒后加载或捕获页面加载的超时异常,然后调用window.stop()

因为如果页面没有采用延迟加载技术(仅加载可见元素并仅在滚动后加载元素的其余部分),它会在返回window.ready状态之前加载每个元素,因此如果任何元素需要更长的时间,它将会更慢渲染。