2011-08-31 95 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狀態之前加載每個元素,所以如果元素中的任何元素需要較長的時間來渲染,它將會變慢。

相關問題