2010-01-05 341 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