3

我已經作出使用使用yadda庫硒webdriver的功能性測試。問題在於,在我的不同環境中,相同的測試套件工作不同。例如:策略在JavaScript測試硒的webdriver在不同的環境

在測試中,它的基礎上的環境,我進入是不同的結果。

本地本地主機:5000

Open my search site 
     ․ when i go to my site: 2169ms 
     ․ when i write a text on the search input: 21ms 
     ․ when i click the search button: 130ms 
     ․ then i get the results page.": 46ms 

分期mystaging.domain.com

Open my search site: 
     StaleElementReferenceError: {"errorMessage":"Element is no longer attached to the DOM","request":{"headers":{"Accept":"application/json; charset=utf-8","Connection":"close","Content-Length":"2" 

生產www.domain.com

Open my search site 
     ․ when i go to my site: 2169ms 
     ․ when i write a text on the search input: 21ms 
     ․ when i click the search button: 130ms 
     ․ then i get the results page.": 46ms 

此時,只有分期測試是失敗的,但在其他情況下,當互聯網連接它的速度慢,測試生產失敗,但傳中分期。 的主要問題是,瀏覽器不具備的DOM準備好了測試,他們沒有找到測試所需的元素。

我對試圖解決這個問題的辦法,這是等待出現我的網頁的根元素是這樣的:

return driver.wait(() => driver.isElementPresent(By.css(".my__homepage")), 50000); 

但這是不夠的,我的,因爲測試套件仍然不能隨意。所以,我的問題是:

這可能是在不同環境下運行的最佳方法,測試套件處理瀏覽器上未準備好的元素?

+0

這似乎是你的DOM元素沒有準備好一個問題。在訪問任何元素之前,您應該對它們進行隱式等待。因此,如果您的響應時間從環境到環境的增加/減少,它不會中斷測試。 –

+0

感謝您的意見。我試圖設定一個等待,但這不行。你知道是否存在一種方法可以100%確保我的測試等待整個HTML文檔的加載,比如「準備就緒」事件或類似的事情? –

+0

我可以給你舉一些例子。您是否在使用C#或Java(或其他)Selenium? –

回答

0

我顯示你,我做了我的IE瀏覽器運行的一個簡單的C#代碼,但它可以爲其他瀏覽器和語言的工作類似。

private static WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(120)); //max driver wait timeout 120 seconds 

try 
{ 
    //waiting for document to be ready 
    IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)driver; 
    wait.Until(sc => jsExecutor.ExecuteScript("return document.readyState").Equals("complete")); 

    //waiting for an element. 
    //use 'ExpectedConditions.ElementToBeClickable' as in some cases element gets loaded but might not be still ready to be clicked 
    wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("elementID"))); 
} 
catch (Exception ex) 
{ 

} 
  • 基本上我把一個等待該文檔使用JavaScript執行
  • 我也是把對我會訪問每個元素的隱含等待做好準備。我使用的預期條件作爲ElementToBeClickable因爲有時ElementIsPresent並不意味着元素可以按照您的需求進行訪問。

注意:您可能還需要檢查其他元素屬性(如啓用/禁用等),具體取決於您的需要。