【问题标题】:How to select a valid random value from drop down using NightwatchJS?如何使用 NightwatchJS 从下拉列表中选择有效的随机值?
【发布时间】:2018-05-31 23:41:25
【问题描述】:

我正在尝试使用 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>

到目前为止,我使用的方法是不可靠的,以防我选择的随机数在下拉选项值中不存在。

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

如果随机数 6 未出现在列表中,它将无法通过进一步的测试。

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

【问题讨论】:

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


    【解决方案1】:

    使用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)");
    

    【讨论】:

    • 谢谢,我已经使用了这种方法,到目前为止这是最好的方法。
    【解决方案2】:

    向选项添加顺序 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>
    

    【讨论】:

    • 问题是,这些数据本质上是动态的,取决于后端启用或禁用的所有选项。如果是这样的话,我就不会遇到这个问题了。
    【解决方案3】:

    遇到类似情况,当您必须随机选择单选按钮时。这有点棘手 - 你不能真正使用 :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;
    };
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多