使用 $$ 或 webdriverio 中的元素访问元素
Accessing elements using $$ or elements in webdriverio
我想使用 webdriverio 使用 $$
或 elements
命令访问网络元素。我知道它们 return 网络元素数组,但我很难访问它们,可能是因为我是 webdriverio 的新手。
我尝试了以下代码:
var webdriverio = require('webdriverio');
var options = {
desiredCapabilities: {
browserName: 'firefox',
},
};
var client = webdriverio.remote(options);
client
.init()
.url(some url)
.isExisting(selector).then(function(isExisting)) {
if(isExisting) {
var bText = this.$$('textarea[name="message_text]') // this code onwards it is not working
bText.then(function (res) {
console.log(res.length);
console.log(res);
res.value.forEach(function (elem) {
return this.click(elem.ELEMENT)
.setValue(elem.ELEMENT,'some text')
.keys('Enter')
})
})
在上面的代码中,我可以在控制台中看到数组 res
但 forEach
循环似乎不起作用。我想对 this.$$('textarea[name="message_text"]')
中存在的每个元素执行 click, setValue and keys('Enter')
也无法理解为什么 returned 元素采用 JSON 对象的形式?
如果有人能指导我正确的方向,那将会有所帮助!
使用 'client' 而不是 'this' 来 select 元素。
var bText = client.$$('textarea[name="message_text]') // this code onwards it is not working
bText.then(function (res) {
console.log(res.length);
console.log(res);
在这里查看 runner 的用法 -
https://github.com/webdriverio/webdriverio/issues/1043
@ChristianB 的建议实际上奏效了,因为 webdriverio 的独立应用程序是建立在 webdriverjs 之上的,其方法 return 承诺我们需要解决它们 properly.I 能够使用 map
做到这一点& Promise.all
:
var bText = this.$$('textarea[name="message_text]')
bText.then(function (res) {
console.log(res.length);
console.log(res);
var promises = res.map(function (elem) {
return client
.elementIdClick(elem.ELEMENT)
.setValue(elem.selector,'some text')
.keys('Enter')
})
return Promise.all(promises)
})
我想使用 webdriverio 使用 $$
或 elements
命令访问网络元素。我知道它们 return 网络元素数组,但我很难访问它们,可能是因为我是 webdriverio 的新手。
我尝试了以下代码:
var webdriverio = require('webdriverio');
var options = {
desiredCapabilities: {
browserName: 'firefox',
},
};
var client = webdriverio.remote(options);
client
.init()
.url(some url)
.isExisting(selector).then(function(isExisting)) {
if(isExisting) {
var bText = this.$$('textarea[name="message_text]') // this code onwards it is not working
bText.then(function (res) {
console.log(res.length);
console.log(res);
res.value.forEach(function (elem) {
return this.click(elem.ELEMENT)
.setValue(elem.ELEMENT,'some text')
.keys('Enter')
})
})
在上面的代码中,我可以在控制台中看到数组 res
但 forEach
循环似乎不起作用。我想对 this.$$('textarea[name="message_text"]')
中存在的每个元素执行 click, setValue and keys('Enter')
也无法理解为什么 returned 元素采用 JSON 对象的形式?
如果有人能指导我正确的方向,那将会有所帮助!
使用 'client' 而不是 'this' 来 select 元素。
var bText = client.$$('textarea[name="message_text]') // this code onwards it is not working
bText.then(function (res) {
console.log(res.length);
console.log(res);
在这里查看 runner 的用法 - https://github.com/webdriverio/webdriverio/issues/1043
@ChristianB 的建议实际上奏效了,因为 webdriverio 的独立应用程序是建立在 webdriverjs 之上的,其方法 return 承诺我们需要解决它们 properly.I 能够使用 map
做到这一点& Promise.all
:
var bText = this.$$('textarea[name="message_text]')
bText.then(function (res) {
console.log(res.length);
console.log(res);
var promises = res.map(function (elem) {
return client
.elementIdClick(elem.ELEMENT)
.setValue(elem.selector,'some text')
.keys('Enter')
})
return Promise.all(promises)
})