2010-02-01 58 views
5

我一直在運行到一些java selenium-rc測試的間歇性錯誤,我認爲這些測試與具有ajax輪詢的頁面相關,並在服務器上達到某些條件時自動刷新。在這種情況下,我沒有辦法讓硒等待頁面加載,所以我遇到了一堆隨機的「無法訪問document.body」錯誤。從硒處理自刷新頁面

那麼,有什麼辦法可以讓硒正常處理這種情況?如果沒有,是否有某種方式可以檢測用戶是否來自頁面的JavaScript的硒,並禁用自動刷新?

如果它幫助所有,在頁面的JavaScript代碼看起來像...

var ajax = new Ajax(url, { 
    update: state, 
    method: 'get', 
    onComplete: function(message) { 
     if (some_condition) { 
      window.location.replace(unescape(window.location)); 
     } 
    } 
}); 
+0

@Matt頁面重新加載時會發生什麼變化 – AutomatedTester 2010-02-02 09:03:58

+0

已禁用的某些鏈接將重新啓用 - 與測試無關。 理想情況下,我們會使用ajax或其他方式將頁面更新爲新狀態,但與此頁面刷新機制相比,完成該操作所需的工作量很大。 – 2010-02-03 00:33:02

+0

看起來像我可能能夠檢測到在硒下運行的東西像http://nerd.metrocat.org/2009/10/detecting-selenium或http://thoughtstoblog.blogspot.com/2009/09/selenium-alert -and-確認功能於pages.html。我明天就去... – 2010-02-03 10:37:35

回答

1

我的解決辦法是通過類似如下的包裝以禁用JavaScript中的刷新...

var isSeleniumActive = parent.seleniumAlert; 
if (isSeleniumActive) { 
    alert("Selenium"); 
} else { 
    alert("Not selenium"); 
} 

我不知道,如果這裏的seleniumAlert功能可能生病撒手人寰,所以意識到如果你採取這種方式,你可能依靠硒的內部硒實施細節。

+0

看起來像一個很好的解決方法。我會質疑必須更改您的應用以適合您的測試,但聽起來您沒有多少選擇。 – 2010-02-05 09:14:36

-1

我認爲,你可以暫停,或使用點擊並等待。在谷歌上有a fewgood articles。祝你好運。

編輯的評論:

怎麼樣waitFor command

+0

問題是,刷新是由底層頁面觸發的,而不是硒,所以硒沒有時間知道它需要調用暫停或clickAndWait。 – 2010-02-02 04:47:49

1

一種解決方案可能是試圖與被測試的應用程序進行交互之前,總是用一個isElementPresent使用waitForCondition。您可以將以下方法放入超類中,以使測試更具可讀性。或者,您可以爲執行此等待的常見Selenium命令創建輔助方法。

/** Waits for an element to be present */ 
public static void waitForElementToBePresent(String locator) { 
    session().waitForCondition("var value = selenium.isElementPresent('" + locator.replace("'", "\\'") + "'); value == true", "60000"); 
} 

您可能還需要等待元素是可見的,因爲等待它只是存在是不夠的(想象一個文本框是始終存在的,但隱藏,直到一定的條件)。你可以用上面的方法結合起來的:

/** Waits for an element to be visible */ 
public static void waitForElementToBeVisible(String locator) { 
    waitForElementToBePresent(locator); 
    session().waitForCondition("var value = selenium.isVisible('" + locator.replace("'", "\\'") + "'); value == true", TIMEOUT); 
} 

順便說一句,webdriver的(硒2)團隊正在努力在具有隱含等待,專門解決AJAX的問題,其中的元素不會立即出現。

+0

在waitForCondition完成(成功)之後但在下一個測試步驟開始之前仍然無法刷新頁面,導致下一步失敗? 這個解決方案可能會有幫助,如果該頁面在waitForCondition開始時刷新的中間,但 - 謝謝。 – 2010-02-03 00:37:09

+0

不幸的是,它仍然是一種可能性,是的。由於頁面尚未加載任何內容,因此頁面處於命令返回失敗狀態的機會也可能存在。在這種情況下,我不得不等待窗口名稱存在於以前的項目中。 – 2010-02-03 08:53:04

+0

猜猜我不得不考慮試圖在Selenium下以某種方式運行時禁用刷新 - 謝謝。 – 2010-02-03 10:31:59

0

那裏我面臨同樣的問題,我使用一行代碼,它有幫助。

我是獲取有關頁面錯誤越來越自動刷新 加上這樣的警告:

-1490472087141木偶WARN使用過時的數據結構來設置超時

所有我用的是

Thread.sleep(2000) 

它爲我工作。