Nightwatch从选择框中选择选项

我正在尝试使用nightwatch.js从选择框中选择一个选项。

我有代码:

this.browser.click('select[name="month"]') .pause(1000) .click('option[value="3"]') .click('select[name="day"]') .pause(1000) .click('option[value="6"]') .click('select[name="year"]') .pause(1000) .click('option[value="1989"]'); 

它会在页面上选择正确的月份,而不是当天。 这是当天选择框的HTML:

   Day 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  

有谁知道为什么它没有选择正确的一天?

根据这篇文章 ,这是有效的:

 .click('#myselectbox option[value=somevalue]') 

以下语法似乎更可靠:

 .click('select[id="myselectbox"] option[value="somevalue"]') 

您可以尝试以下方式,它适合我。

  ... .setValue('select[id="day"]','2') 

如果您的值与您选项中的文本不同

例如

你做.setValue ('select[id="yourselectid"]','abc')

如果您想使用Page Object,则必须使用回调。

 sectionInfo.click("@selectOwner",()=>{ sectionInfo.click("option[value='owner']"); }); 
 .click("#selectid option:nth-child(1n)") 

这也可以使用类标识符 –

例如

 .click(".selectclass option:nth-child(1n)") 

将nth-child设置为1n将选择下拉列表中的第一个项目。

设置为2n将选择第二个值等。

希望这对那些与之前提出的解决方案没有运气的人有所帮助。

要通过@IceManSpy改进答案:您不需要对页面对象使用回调,这也适用:

 pageObject .click('@selectOwner') .click('option[value="owner"]') 

或者,如果您想按位置而不是按值选择:

 pageObject .click('@selectOwner') .click('option:nth-child(3)') 

注意:nth-child(3)而不是:nth-child(3n) ,因为前者表示“第三选项”,后者表示“每第三个选项”。 有关详细信息,请参阅MDN上nth-child的文档

(用Nightwatch 0.9.21测试)