2012-11-08 59 views
0

我運行約30腳本測試用例(每個測試用例是腳本)串聯並有通常包括故障:不能識別指定的元素,元素不​​存在。如何提高我的Selenium腳本的健壯性?

我已經加了很多不同的方法來等待元素出現。有時當它顯然存在時,我猜Selenium很難找到元素的ID?

我已經包括了幾個

do{ 
    if(selenium.isElementPresent("id=resultTable_0_0"){ 
    selenium.click("viewResultForm:refresh_button"); 
    } 
}while (!selenium.isElementPresent("id=resultTable_0_0")); 

if(selenium.isElementPresent("id=resultTable_0_0")) 
     selenium.isVisible("id=resultTable_0_0"); 

if(selenium.isElementPresent("id=resultTable_0_0_1_to")) 
    selenium.click("resultTable_0_0_1_to"); 

總是檢查元素是否做某件事之前甚至存在。這可能會對性能產生巨大的影響,但現在我只想讓我的腳本運行無錯誤,完全健壯。我有這樣一段代碼:

do{ 
    if(selenium.isElementPresent("id=resultTable_0_0")){ 
    selenium.click("viewResultForm:refresh_button"); 
    } 
}while (!selenium.isElementPresent("id=resultTable_0_0")); 

     if(selenium.isElementPresent("id=resultTable_0_0")) 
      selenium.isVisible("id=resultTable_0_0"); 
     if(selenium.isElementPresent("id=viewResultForm:currentDetailViewType")) 
      selenium.isVisible("id=viewResultForm:currentDetailViewType"); 
     if(selenium.isElementPresent("id=viewResultForm:currentSearchDateType")) 
      selenium.isVisible("id=viewResultForm:currentSearchDateType"); 
     if(selenium.isElementPresent("id=viewResultForm:currentLegalEntity")) 
      selenium.isVisible("id=viewResultForm:currentLegalEntity"); 
     if(selenium.isElementPresent("id=viewResultForm:currentRollupBy")) 
      selenium.isVisible("id=viewResultForm:currentRollupBy"); 
     if(selenium.isElementPresent("id=viewResultForm:currentSecurityAltId")) 
      selenium.isVisible("id=viewResultForm:currentSecurityAltId"); 
     if(selenium.isElementPresent("id=viewResultForm:currentSecurityAltIdType")) 
      selenium.isVisible("id=viewResultForm:currentSecurityAltIdType"); 
     if(selenium.isElementPresent("id=viewResultForm:currentDepoViewType")) 
      selenium.isVisible("id=viewResultForm:currentDepoViewType"); 
     if(selenium.isElementPresent("id=viewResultForm:currentBusinessDate")) 
      selenium.isVisible("id=viewResultForm:currentBusinessDate"); 

     System.out.println("Success T13001"); 
     selenium.stop(); 

即使這樣會報錯了!它不會經過selenium.stop和'假'的成功。我能做些什麼來構建我的腳本的健壯性?任何幫助,將不勝感激。

我使用硒2.20.0在IE 8

回答

1

根據您的問題,如果沒有找到定位器然後嘗試使用其他定位器像CSS和XPath的ID的問題。

應用selenium.waitforpagetoload當過你移動到一個新的頁面,或者打開一個網址。

如果您正在開發一個基於ajax的應用程序,那麼selenium.waitforcondition將會幫助您。

徘徊無論你認爲一個定位器可能需要一些時間一些手術後出現,這些元素使用適當的等待。

+0

我覺得** ** selenium.waitforpagetoload是不可靠的。實際上,我用** ** selenium.waitforframetoload因爲它只是在重新加載指定的我** selenium.click後()**事件的頁面的框架。 至於**的XPath **,似乎很不穩定,喜歡它的錯誤了更加頻繁。 – qwer1234