WebdriverIO无法获得输入的价值?

时间:2018-08-24 17:24:29

标签: javascript selenium safari automated-tests webdriver-io

我正在为一个safari自动执行Web应用程序的测试...。   但我有麻烦。看来webdriverIO与Safari搭配使用不太好。   我的环境是:   wdio:v4.13.1   节点:v10.8.0

我尝试获取输入字段的值

const value = browser.getValue('input.xxxxxxxxx')

但我有例外

The command 'GET /session/E5218F3F-7FE1-43D5-A231-A4B8CCB2C599/element/node-807A67A6-E0E8-4AD7-A505-9ED62ECD6FE6/property/value' was not found.
running safari
Error: The command 'GET /session/E5218F3F-7FE1-43D5-A231-A4B8CCB2C599/element/node-807A67A6-E0E8-4AD7-A505-9ED62ECD6FE6/property/value' was not found.
at elementIdProperty("node-807A67A6-E0E8-4AD7-A505-9ED62ECD6FE6", "value") - getValue.js:35:54

但是,如果我使用的是Chrome,则可以完美运行。 我还尝试了一些更俗气的方式,例如

const value = browser.execute("document.querySelector('input.xxxxxxxx')")
console.log(value)
// gives me this
{ sessionId: '40DD4190-CB6D-4188-962F-9059D96C0441',
value: null,
_status: 0 }

无法找到解决方法。有人可以帮忙吗?

我还发现点击也不适用于野生动物园。它将抱怨该元素不可见,但该元素在那儿显然可见。 我的解决方法是

browser.execute("document.querySelector('.popup-menu-items li).click()") 

在chrome中,我不需要执行此肮脏的解决方法。 使用webdriverIO在野生动物园中进行测试确实很痛苦。

2 个答案:

答案 0 :(得分:0)

这似乎与硒有关,而不是webdriverio。

在Google上快速搜索为我提供了这个官方设置页面: https://developer.apple.com/documentation/webkit/testing_with_webdriver_in_safari

如果这样做不可行,我相信您应该在硒方面进行更多的研究。

答案 1 :(得分:0)

昨天我花了太多时间研究此问题,因为在带有wdio v4.13.2的Safari上运行时遇到相同的错误

错误消息很正确,没有命令:

GET /session/:sessionId/element/:id/property/:name

我们真正想做的是:

GET /session/:sessionId/element/:id/attribute/:name

我发现一些文档列出了可以进行here的呼叫

如果您在webdriverio中查看函数getValue,它将调用它自己的名为elementIdProperty的函数,该函数向上述URL wd/hub/session/"sessionId"/element/"elementId"/property/value发出请求。但是,该函数中有一个条件语句,说如果它是未知命令,则应调用另一个名为elementIdAttribute的函数,该函数向正确的URL发出请求,以/attribute/value结尾。我的猜测是,当您在Chrome中运行它时,它可以识别未知命令的响应,而当您在Safari中运行时,它无法识别。当我尝试在浏览器中手动发出请求时,响应看起来有所不同。所有这些都使查找和解决问题感到非常沮丧。

我的解决方法是直接从webdriverio直接使用功能getAttribute,如下所示:

const value = browser.getAttribute(selector, 'value');

然后我们可以查看他们是否会在更高版本的webdriverio中对其进行修复。