无法使用nightwatch js从下拉列表中选择选项

时间:2018-04-01 13:04:48

标签: ui-automation nightwatch.js

我已经看过其他一些使用以下格式的帖子,但它根本不起作用,即使选择没有打开:

.click(".selectpicker option[value='somevalue']")

但是当我写这样的时候:

.click("select[id='chooseone']")

确实打开了下拉列表。

选择如下:

<select class="selectpicker btn dropdown-toggle btn-default" title="Choose one of the following..." id="chooseone" style="">
<option value="chooseone" style="">Choose one</option>
<option value="value1" style="">option 1</option>
<option value="value2" style="">option 2</option>
<option value="value3">option 3</option>
</select>

后端有反应代码,因此会触发onchange事件,该事件将显示每个选项的适当输入字段和提交按钮。

我的测试基本上是:

  1. 选择一个选项
  2. 填写字段
  3. 提交
  4. 验证结果容器
  5. 我该如何编写此代码?这是我第一次这样的事情。任何帮助表示赞赏。

    由于

    更新&gt;&gt;&gt;

    这是在Safari中,它不起作用。但是当我安装chromedriver时,它确实有效。这是工作代码:

    .click('select[id="searchBySelect"] option[value="any_option_value"]')
    

    这将点击select元素中提供的选项。

2 个答案:

答案 0 :(得分:1)

首先,您需要打开下拉菜单。看起来你已经知道这一点,但无论如何你都应该从:

开始
browser.click('.selectpicker');

然后有几种方法可以获得您想要点击的选项。您可以通过执行以下操作来选择特定选项(只需修改它以选择您想要的任何选项)

browser.element('css selector', '.selectpicker', function(element) {
  browser.elementIdElement(element.value.ELEMENT, 'css selector', 'option[value="value1"]', function(option) {
    browser.elementIdClick(option.ELEMENT);
  });
}); 

或者您可以获取数组中的所有选项,然后单击其中一个选项:

browser.elements('css selector', 'option', function(elements) {
  browser.elementIdClick(elements.value[0].ELEMENT); //can use any index here as long as you know which one you are looking for
});

答案 1 :(得分:0)

tehbeardedone 非常感谢您提供解决方案。我必须做一个小修复才能使 elementIdClick() 正常工作。

代替option.ELEMENT

我不得不使用option.value.ELEMENT

由于我的代码片段必须添加到页面对象中,这是它的最终版本:

let durationOptionSelector = `option[contains(text(), "${duration}")]`;  //dynamic option selector

this.click("@duration_dropdown");

this.api.element("xpath", "@duration_dropdown", function (dropdown) {
  this.elementIdElement(dropdown.value.ELEMENT, "xpath", durationOptionSelector, function(option) {
    this.elementIdClick(option.value.ELEMENT);
  });
});