2011-08-31 98 views
1

SeleniumServer版本:2.5.0,Firefox的版本:4.0.1硒:Firefox浏览器的webdriver:页面加载问题

我有一个地方的“新问题”的超链接是通过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:请让我知道,如果你需要更多的信息。

+0

你用WebDriverWait试过了吗? – prestomanifesto

+0

你用isDisplayed()而不是isEnabled()来试试吗?您也可以尝试这种方式:while(!(driver.findElement(By.xpath(“// a [text()='New Question']”))。isDisplayed())){ThreadThread(1000) ; } –

回答

3

您不需要while循环,当初始化驱动程序时可以隐式使用Wait。这会让驱动程序在抛出元素未发现异常之前轮询90秒内出现元素。

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

是的,我认为它应该工作 –

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); 
     } 
0

您仍然可以通过等待存在于预期的元素(不等待知名度,的IsEnabled)说5-8秒,然后发送window.stop加速你的脚本执行()JS脚本(停止进一步加载元素)无需等待整个页面加载或捕获页面加载超时异常后5-8秒,然后调用window.stop()

因为如果页面没有采用延迟加载技术(只加载可见元素并加载休息只有在滚动后才显示元素)它会在返回window.ready状态之前加载每个元素,所以如果元素中的任何元素需要较长的时间来渲染,它将会变慢。

相关问题