使用$$或webdriverio中的元素访问元素

时间:2016-11-28 06:43:47

标签: webdriver-io

我想使用webdriverio使用$$elements命令访问Web元素。我知道他们会返回一系列网页元素,但我很难访问它们,可能是因为我是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循环似乎无法正常工作。我想对click, setValue and keys('Enter')中存在的每个元素执行this.$$('textarea[name="message_text"]')也无法理解为什么返回的元素是JSON对象的形式? 如果有人能指导我正确的方向,那将有所帮助!

2 个答案:

答案 0 :(得分:2)

使用'客户'而不是这个'选择元素。

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);

请参阅此处使用跑步者 - https://github.com/webdriverio/webdriverio/issues/1043

答案 1 :(得分:0)

@ ChristianB的建议实际上是有效的,因为webdriverio的独立应用程序是建立在webdriverjs之上的,其方法返回promises我们需要正确解决它们。我能够使用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)
   })