2013-02-07 99 views
0

我使用JAVA和一些Selenium腳本在Eclipse IDE中創建測試用例。Selenium - Java在測試腳本中等待頁面加載失敗

我的問題是,有時候,連續運行的測試用例會在selenium.waitForPageToLoad(「30000」)方法中產生錯誤/失敗的測試。我做了一個解決方案,該方法將循環,直到滿足特定的條件,所以我來到這個代碼。但這不起作用。

這會發生什麼情況:運行Junit測試> @ Test1,2,3..n>頁面無法加載@ Test n>執行下一行代碼>在@Test n>中測試失敗,因爲Page未加載,因此下一個腳本無法完成(缺少頁面中所需的元素,因爲它沒有加載)。

這是什麼SUPPOSED發生:運行Junit測試> @ Test1,2,3..n>頁面不加載@ Test n>等待頁面加載,直到滿足特定條件(例如元素X已存在在執行下一行代碼>在測試中通過測試n

我需要一個解決方案,等待頁面加載,直到存在下一行腳本所需的元素。

此代碼不起作用。我非常需要你的幫助。由於

//Wait for Page to Load until Expected Element is not Present 
public void waitForPageToLoadElement(final String isElementPresent){ 

boolean elementBoolean; 
do{ 
selenium.waitForPageToLoad("30000"); 
elementBoolean = selenium.isElementPresent(isElementPresent); 
if (elementBoolean==false){ 
try{Thread.sleep(3000);} 
catch (Exception e) { 
//catch 
}} 
} 
while(elementBoolean==false); 
} 
//Wait for Page to Load until Expected Text is not Present 
public void waitForPageToLoadText(String isTextPresent){ 

boolean elementBoolean; 
do{ 
selenium.waitForPageToLoad("30000"); 
elementBoolean = selenium.isTextPresent(isTextPresent); 
if (elementBoolean==false){ 
try{Thread.sleep(3000);} 
catch (Exception e) { 
//catch 
}} 
} 
while(elementBoolean==false); 

} 

//Opens url until Expected Element is not Present 
public void openUrl(String url){ 

boolean userNameBoolean, passwordBoolean; 
do { 
selenium.open(url); 
userNameBoolean = selenium.isElementPresent("id=loginForm:username"); 
passwordBoolean = selenium.isElementPresent("id=loginForm:password"); 
if (userNameBoolean==false && passwordBoolean==false){ 
try{Thread.sleep(3000);} 
catch (Exception e) { 
//catch 
}} 
}while (userNameBoolean==false && passwordBoolean==false); 

} 
+0

我覺得你的情況下,將上述代碼中的無限循環去,如果找不到的元素。該元素是否出現在頁面上並且未找到?這是發生在特定元素還是隨機? –

+0

如果不加載,則所有元素都不存在。它隨機發生。我需要有另一個代碼,它將等待一個條件滿足,而不是waitForPageToLoad(milliSeconds)方法。 –

回答

0

public static void waitforElement(Selenium selenium,String element) 
{ 

     try 
     { 
      int second; 
      for (second = 0; ; second++) 
      { 

       if (selenium.isElementPresent(element)) 
       { 
        break; 
       } 
       if (second >= 20) 
       { 
        break; 
       } 
       Thread.sleep(1000); 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

之前做任何操作與任何元素只需要調用該元素的這種方法,這樣它會等待元素,直到超時爲止(這種類型的邏輯可能是有幫助即20秒),如果沒有找到該元素。

waitforElement(selenium,"id=loginForm:username"); 
selenium.type("id=loginForm:username","username"); 
waitforElement(selenium,"id=loginForm:password"); 
selenium.type("id=loginForm:password","password"); 
selenium.click("submit"); 
+0

這不起作用。 :( –

+0

參數Selenium selenium的用途是什麼? –

+0

用於檢查該方法中的selenium.isElementPresent(element) – Santoshsarma

相關問題