【问题标题】:Nightwatch integration test: Can't select option from select dropdown in SafariNightwatch 集成测试:无法从 Safari 的选择下拉列表中选择选项
【发布时间】:2018-07-22 23:22:45
【问题描述】:

我已经阅读了其他帖子并尝试了建议(例如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');
});

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

到目前为止,关于守夜人问题、谷歌群组或 stackoverflow 中的任何内容都没有帮助。有没有人遇到过这个问题,有没有人想出解决办法?

注意:我也尝试过一种通用的 selenium 方法,并使用 .execute('insert javascript to change value of select element') 但这不会触发 onchange 事件和表单反正不提交。

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

我已经为此投入了大约 2-3 天的工作,因此非常感谢任何帮助。谢谢!

【问题讨论】:

  • 你试过.setValue(selector, value)吗?
  • 我没有,但这里的问题是我不一定提前知道值,因为它是动态的

标签: javascript selenium safari automation nightwatch.js


【解决方案1】:

可能的工作是获取您正在寻找的<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 }));

【讨论】:

  • 选项 1 在 chrome 上对我有用,但不幸的是再次在 safari 上不起作用,但选项 2 对两者都有效!非常感谢,这让我在一周的大部分时间里都受阻。干杯!
猜你喜欢
  • 1970-01-01
  • 2016-10-13
  • 2015-03-13
  • 1970-01-01
  • 2017-05-19
  • 2017-05-09
  • 2017-10-17
相关资源
最近更新 更多