如何使用NightwatchJS从下拉列表中选择有效的随机值?

时间:2016-02-18 14:55:39

标签: javascript user-interface testing selenium-chromedriver nightwatch.js

我正在尝试使用nightwatch.js自动执行一些UI测试,我需要从下拉列表中选择一个随机值,看起来像下面的代码。



<select class="form-control" name="drop_ddl" id="drop_ddl">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
&#13;
&#13;
&#13;

到目前为止,我使用的方法是,如果我选择的随机数在下拉选项值中不存在,则我没有可靠性。

&#13;
&#13;
  var drop_ddl=Math.floor((Math.random() * 8) + 1);
  return this.client.click("#drop_ddl option[value='"+drop_ddl+"']");
&#13;
&#13;
&#13;

如果随机数是6,它没有出现在列表中,它将无法进行进一步的测试。

有没有办法可以将值读取到数组中,然后从这些可用值中随机选择?

3 个答案:

答案 0 :(得分:2)

使用elements获取所有下拉选项。

browser.elements('css selector', '#drop_ddl option', function(result) {
        return result.value.length;
    })

现在您有了多个选项,请使用nth-child选择随机选项。

var drop_ddl=Math.floor((Math.random() * optionsLength) + 1);
 return this.client.click("#drop_ddl option:nth-child(drop_ddl)");

答案 1 :(得分:0)

如何向选项添加顺序ID?

<select class="form-control" name="drop_ddl" id="drop_ddl">
<option id="1" value=""></option>
<option id="2" value="1">1</option>
<option id="3" value="2">2</option>
<option id="4" value="3">3</option>
<option id="5" value="4">4</option>
<option id="6" value="7">7</option>
<option id="7" value="8">8</option>
<option id="8" value="9">9</option>
<option id="9" value="11">11</option>
<option id="10" value="12">12</option>
</select>

<script>
var drop_ddl=Math.floor((Math.random() * 10) + 1);
$("#drop_ddl option[id='" + drop_ddl + "']").attr("selected", "selected");
</script>

答案 2 :(得分:0)

遇到类似情况,当您必须选择随机单选按钮时。这有点棘手 - 你不能真正使用:nth-child选择器,因为血腥的混蛋可以遍布整个地方。在这种情况下,您可以使用:

exports.command = function (selector, value) {
    this
        .elements('css selector', selector, res => {
            if (res.value.length) {
                let random = Math.floor(Math.random() * res.value.length);
                let el = res.value[random].ELEMENT;
                this.elementIdClick(el);
            }
        });
    return this;
};