2010-05-25 77 views
0

我在Selenium RC中遇到了一個奇怪的問題。當我使用IE7時,測試工作正常。但是,如果我使用Firefox 3.5,Selenium會在完全加載之前提取頁面。使用線程睡眠可以解決此問題。在Selenium RC中加載FireFox和IE的頁面

頁面加載標誌如何處理IE和FireFox之間有區別嗎?

selenium.setTimeout(Timeout); 
selenium.open("http://localhost"); 
selenium.waitForPageToLoad(Timeout); 
selenium.windowMaximize(); 
selenium.windowFocus(); 
Thread.sleep(60000); 
selenium.type("//html/body/table/tbody/tr[2]/td/div/form/table/tbody/tr[1]/td/table/tbody/tr[3]/td[2]/input","test"); 
selenium.type("pwd","test"); 
selenium.click("submit"); 
selenium.waitForPageToLoad(Timeout);   
Thread.sleep(60000); 
System.out.println(selenium.getLocation()); 
System.out.println(selenium.getHtmlSource()); 
String[] ro=selenium.getAllLinks(); 
System.out.println("-----"+ro.length); 

在IE7中,一切適用thread.sleep,而不是在FireFox中。

+0

你的例子有兩個睡,如果是去掉其中一個導致Firefox的一個問題?另外,您從Selenium獲取什麼錯誤? – 2010-05-25 11:44:04

+0

如果我刪除睡眠,硒沒有找到FireFox中的元素。沒有其他的。 – Rajasankar 2010-05-25 12:13:59

+0

因此,這將是第一次睡眠,然後你會得到一個ElementNotFoundException? – 2010-05-25 12:19:25

回答

3

可能是因爲在發送Selenium命令之前,頁面加載時運行的任何JavaScript尚未完成。例如,如果您嘗試輸入的輸入最初被禁用,則Selenium可能會嘗試在啓用它的JavaScript已完成之前鍵入它。

如果是這種情況,您可以嘗試在測試中添加適當的waitForCondition命令,這將不斷重新評估並在條件滿足時繼續執行,這比任意睡眠好得多。

下面的例子會等待一個元素變成啓用:

selenium.waitForCondition("var value = selenium.isEditable('id=myElement'); value == true", "60000"); 

我也建議檢查您的定位,因爲它是目前一個非常脆弱的XPath,只是略有變化到Web應用程序的HTML源代碼可能會破壞你的測試。嘗試尋找id屬性並創建相對於此的xpath。

例如,如果您的決賽桌了的myTable你可以使用一個id

xpath=id('myTable')//tr[3]/td[2]/input 
+0

可能是JavaScript沒有完全加載頁面。不過,我想知道,IE和FireFox頁面載入標誌是否有區別。 – Rajasankar 2010-05-25 12:16:15

+0

我猜想你在IE和Firefox中看到差異的原因是由於IE在通過XPath定位方面速度較慢,給你的頁面足夠的時間來完成加載。 – 2010-05-25 12:18:21