2016-11-28 14 views
0

webdriverioを使用して$$またはelementsコマンドを使用してWeb要素にアクセスしたいとします。私は彼らがWeb要素の配列を返すことを知っていますが、おそらく私はwebdriverioが初めてであるため、それらにアクセスするのに苦労しています。 Iは、以下のコードを試みた:

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')を実行して、返された要素がJSONオブジェクトの形式である理由を理解できないようにしますか? 誰かが正しい方向に私を導くことができれば助けになるだろう!

+1

しようとすると、ドキュメントを読んでましたか?彼らはなぜそれほど広範囲に読んだのですか? – zerohero

+0

私はそれをかなり読んだのですが、forEachループの要素にアクセスすることができません。 –

+1

このようなforeachループではコマンドを実行できません。スタンドアロンモードでは、すべてのコマンドが非同期で実行されます。コマンドによって返されるすべての約束を正しく処理する必要があります。 wdio testrunnerを使うと、コマンドが同期して実行されるので、はるかに簡単です。 – ChristianB

答えて

0

はwebdriverioのスタンドアローンのアプリがその方法を返す約束我々はproperly.Iができたそれらを解決する必要がwebdriverjsの上に構築されているので、実際に働いていました使用してこれを行う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) 
    }) 
2

'this'の代わりに 'client'を使用して要素を選択します。

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

ここでランナーの使用を参照してください - ChristianBの提案@ https://github.com/webdriverio/webdriverio/issues/1043

+0

'this'はクライアント変数のスコープに属しているので、何の違いもありません。本当の問題は、私が@ChristianBによって指摘された約束を適切に処理していないことでした。とにかくありがとう! –

関連する問題