Nightwatch集成测试:无法从Safari中的选择下拉列表中选择选项

时间:2018-02-12 17:44:21

标签: javascript selenium safari automation nightwatch.js

我已经阅读过其他帖子并尝试过建议(例如Nightwatch Cannot Find/Click on Dropdown OptionNightwatch to select option from select box)但没有成功。

似乎无论我使用什么方法与选择框进行交互,没有什么可以在safari上运行。我用于Chrome的选项在chrome浏览器上仍然可以正常工作,但我们希望我们的safari集成测试能够正常运行。

适用于chrome的选项是:

.click('select[name="elementName"] option.OptionClass')

然而,这会让选择器点击safari但没有选择任何选项,打破了需要选择的表单。

我已尝试连续点击两者,如

.click('select[name="elementName"]') 
.click(' option.OptionClass')

使用击键:

.click('select[name="elementName"]')
.keys(['\uE015', '\uE006'])

包装执行调用:

browser.perform(function() {
  browser
    .click('select[id=element-id]')
    .click('option.className');
});

关于我能想到的每一个组合。

到目前为止,夜间守望问题上没有任何内容,google群组或者stackoverflow中的任何内容都有帮助。有没有人遇到过这个问题,有没有人想出解决方案?

注意:我也尝试过这样做的通用selenium方法,并使用.execute('插入javascript更改select元素的值'),但这不会触发onchange事件和表单反正不提交。

如果我在本地手动截取测试并在自动打开选择框后单击选择选项它可以正常工作,我只需要一种方法导航到或打开后单击该选项。

我已经沉溺了大约2-3天的工作,所以非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

可能有效的方法是获取您要查找的<option>的可见文字,并将其用作setValue()的参数。这适用于我的Chrome浏览器:

browser
  .getText('select[name="elementName"] option.OptionClass', function(result) {
    client.setValue('select[name="elementName"]', result.value);
  })

选项2:

您还可以尝试使用execute()运行JavaScript并以编程方式设置值,然后在select元素上触发更改事件:

var select = document.querySelector('select[name="elementName"]'),
    option = select.querySelector('option.OptionClass');

select.value = option.value;
select.dispatchEvent(new Event("change", { bubbles: true }));