Selenium:循环浏览下拉列表中的每个<option> </option>

时间:2010-01-05 18:25:29

标签: testing selenium

我正在使用Selenium来减轻我的测试负担,我有大约1,000种不同的下拉列表组合(分布在多个页面和下拉列表中),需要进行测试。基本上,我想要做的是选择每个&lt;选项&gt;在&lt; select&gt;内,单击“提交”按钮,在结果页面的下拉列表中选择一个项目(第一个,第二个,第三个等),单击“提交”,然后返回并选择下一个项目,序列。每次都应断言最终页面上存在某个值(与所选下拉列表值相关)。有人知道Selenium中这种逻辑是否可行?

我很难解释这个,所以希望这个伪代码可以解决问题

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

编辑:我在录音机正在播放时从下拉列表中选择了值,但似乎录音机没有拿起所选的下拉列表值。我也没能弄清楚如何为每个&lt;选项&gt;执行操作。在&lt; select&gt;。

我遇到的第一个问题是它是否可能。如果是的话,有人可以指出我正确的方向让我开始吗?

编辑2:我不反对使用其他网络自动化测试工具。如果有人对免费替代方案有任何建议,请随时提出建议。

1 个答案:

答案 0 :(得分: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
        }
    }
}

代码不是完全可读的,因此使用Page Object模式略微抽象页面可能是值得的。这也有助于使代码更易于维护,例如,当您更改元素的ID时,您只需要在页面对象中更改它而不是每次测试。

另外请记住,这样做1000次并不会很快。如果您在Web界面下方进行类似测试以允许从测试中获得更快的反馈,那么可能值得一看,然后测试Web界面是否正确使用了较低层。另外,你真的需要1000次测试吗?这里的测试似乎有一些冗余 - 如果过去的999已经过去,第1000次测试会失败吗?