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

Nightwatch integration test: Can't select option from select dropdown in Safari

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

似乎无论我用什么方法与 select 框交互,在 safari 上都不起作用。我仅用于 chrome 的选项在 chrome 浏览器上仍然可以正常工作,但我们正在寻求提高我们的 safari 集成测试和 运行.

适用于 chrome 的选项是:

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

然而,这会留下 select 或点击 safari 但没有选项 selected,破坏了我们需要 selection 的表格。

我试过像

一样连续点击两个
.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');
});

以及我能想到的每一种组合。

nightwatch 问题、google 组或 Whosebug 中的此处到目前为止没有任何帮助。有没有人遇到过这个问题,有没有人想出解决办法?

注意:我也尝试过寻找一种通用的 selenium 方法来执行此操作,并使用 .execute('insert javascript to change value of select element') 但这不会触发 onchange 事件并且表单不会无论如何提交。

如果我在本地手动拦截测试并在自动化打开 select 框后单击 select 选项它工作正常,我只需要一种方法来导航和/或单击打开后的选项。

我为此花费了大约 2-3 天的时间,非常感谢您的帮助。谢谢!

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

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

选项 2:

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

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

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