Nightwatch无法查找/单击下拉选项

时间:2014-12-14 06:40:29

标签: css nightwatch.js

我是一名背包客和程序员,试图利用第二项技能在一个完整的露营地找到空缺。我正在使用端到端测试框架nightwatch.js来为我导航,而不是从头开始爬行。

我遇到了障碍,因为守夜人很难使用css选择器找到特定的元素。

以下是元素和页面:

Permit type

这是我的测试代码:

Test code

以前的尝试

我的测试代码点击包含#permitTypeId的选择框。它会看到#permitTypeId option可见。当指定更具体的值时,它将查看或单击任何选项。五个.click()都是我已经尝试过的css选择器。所有选项均未设置为display:hiddendisplay:none。我已经尝试了上述所有内容而没有.waitForElementToBeVisible(),以防等待导致下拉隐藏。

我已成功点击此网站上不同下拉菜单中的选项,没有任何问题。只是这一个引起了头痛。

测试与Mac Yosemite上最新的Selenium服务器和Firefox一起运行。

TL;博士

Nightwatch.js / Selenium不会点击下拉菜单中的内容。

5 个答案:

答案 0 :(得分:9)

The Path ...

Cory让我思考jQuery和原生DOM操作。尝试使用Selenium的.execute()函数

成功选择正确的选项
.execute('document.getElementById("permitTypeId").options[1].selected=true')

但是,它没有触发onchange事件。

看到这个post让我开始考虑使用击键和this one建议使用箭头键向下导航<select>元素到选项,然后按Enter键。

...到解决方案

.click('select[id=permitTypeId]')
.keys(['\uE015', '\uE006'])

我发现这是Firefox的一个问题。 Chrome和PhantomJS可以很好地点击<option>标记。

答案 1 :(得分:5)

你应该能够像这样点击

browser.click('select[id="permitTypeId"] option[value="1451140610"]')

答案 2 :(得分:4)

此外,当我为select执行.click时,我能够为特定选项添加.click事件。请参阅下面的示例:

.click('select[name="timezone"]') 
.pause(1000)
.click('option[value="America/Chicago"]') //selects the option but doesn't click
.pause(5000)
.keys(['\uE006']) //hits the enter key.

答案 3 :(得分:0)

另一种解决方案:

  .click('select[id="permitTypeId"]')
  .waitForElementVisible("option[value='1451140610']")
  .click("option[value='1451140610']")

答案 4 :(得分:0)

非常简单的方法是使用.setValue(&#39; @ element&#39;,&#39;选项值&#39;)