我是一名背包客和程序员,试图利用第二项技能在一个完整的露营地找到空缺。我正在使用端到端测试框架nightwatch.js来为我导航,而不是从头开始爬行。
我遇到了障碍,因为守夜人很难使用css选择器找到特定的元素。
我的测试代码将点击包含#permitTypeId
的选择框。它会看到#permitTypeId option
可见。当指定更具体的值时,它将不查看或单击任何选项。五个.click()
都是我已经尝试过的css选择器。所有选项均未设置为display:hidden
或display:none
。我已经尝试了上述所有内容而没有.waitForElementToBeVisible()
,以防等待导致下拉隐藏。
我已成功点击此网站上不同下拉菜单中的选项,没有任何问题。只是这一个引起了头痛。
测试与Mac Yosemite上最新的Selenium服务器和Firefox一起运行。
Nightwatch.js / Selenium不会点击下拉菜单中的内容。
答案 0 :(得分:9)
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;)