2010-01-05 344 views
1

我使用Selenium來減輕我的測試負擔,並且我有大約1,000個不同的下拉列表組合(分佈在多個頁面和下拉列表中)需要測試。基本上,我想要做的是選擇每個<選項> <選擇>選擇>,點擊提交按鈕,在結果頁面的下拉列表中選擇一個項目(第一,第二,第三等),點擊提交,然後返回並依次選擇下一個項目。每次它都應該聲明在最終頁面上存在某個值(與選擇的下拉列表值相關)。有人知道Selenium中這種邏輯是否可行?Selenium:循環遍歷每個<option>在下拉列表中

我有一個很難解釋這一點,所以希望這個僞代碼清除的東西了

foreach option in select 
    select option 
    submit form 

    foreach option in select 
    select option 
    submit form 

     assert that page contains text that matches selected values

編輯:我選擇了從值下拉列表中,而錄音機播放,但它似乎記錄器沒有選擇所選的下拉列表值。我也無法弄清楚如何在<選擇>中執行每個<選項>的操作。

我有的第一個問題是它是否可能。如果是這樣,有人可以請我指出正確的方向,讓我開始?

編輯2:我不反對使用其他網絡自動測試工具。如果任何人對免費替代品有任何建議,請隨時提出建議。

回答

3

Selenium在哪些語言中使用?如果您通過編寫HTML來使用Selenium,我建議您切換到編程語言,並使用Selenium RC - 綁定可用於各種語言,如Java和Python。在Java中,我相信下面會做你想要什麼:

void test(Selenium browser, String startPageUrl, 
      String firstFormLocator, String firstSelectLocator, 
      String secondFormLocator, String secondSelectLocator) { 
    browser.open(startPageUrl); 
    for (String option : browser.getSelectOptions(firstSelectLocator)) { 
     browser.open(startPageUrl); 
     browser.select(firstSelectLocator, "label=" + option); 
     browser.submit(firstFormLocator); // Or click the submit button 
     for (String subOption : browser.getSelectOptions(secondSelectLocator) { 
      browser.open(startPageUrl); 
      browser.select(firstSelectLocator, "label=" + option); 
      browser.submit(firstFormLocator); // Or click the submit button 
      browser.select(secondSelectLocator, "label=" + subOption); 
      browser.submit(secondFormLocator); // Or click the submit button 
      // Do your assertions 
     } 
    } 
} 

的代碼是不完全可讀的,所以它可能是值得一些時間抽象的頁面稍微遠離使用頁面對象模式。這也有助於使代碼更易於維護,例如,當您更改元素的ID時,您只需要在頁面對象而不是每個測試中對其進行更改。

還要記住,這樣做1000次不會很快。如果您在Web界面下執行類似的測試以允許測試更快速的反饋,然後測試Web界面正確使用較低層,則可能值得一看。另外,你真的需要1000個測試嗎?看起來這裏有一些冗餘的測試 - 如果最後999次測試通過,第1000次測試會失敗嗎?

+0

如果你不想做一個foreach,你也可以使用'index ='功能。 for(int i = 0; i AutomatedTester 2010-01-06 10:18:04