私はwebdriverIOで遊んでいました。私はすでにこのフレームワークの多くの機能が大好きです。WebdriverIOが使用されていないWeb要素のPOST '要素'要求を行う理由を教えてください。
WebdriverIOは、このテストでロード存在しない要素と怠惰な要素をどのように動作するか私は調査していた:
it('no element, and not used',() => {
browser.pause(5000)
let non_exist = browser.$('.nonexist')
});
ランナー出力:
```
[17:23:25] COMMAND POST "/wd/hub/session/6b79fd07-5f5d-42ce-b1e5-f99734aae128/element"
[17:23:25] DATA {"using":"css selector","value":".nonexist"}
```
webdriverをサーバログ:
```
*** Element info: {Using=css selector, value=.nonexist}
17:23:25.840 INFO - Executing: [delete session: 6b79fd07-5f5d-42ce-b1e5-f99734aae128])
```
私はWebdriverIOが依然としてSeleniumサーバーにPOSTリクエストを送信し、宣言の要素を見つける。
これで2番目のテストが表示されます。ここで私は要素を宣言しています、それはページ上に存在するが、後でそれを使用しようとしていません。
it('no element, used later in the code',() => {
browser.pause(5000)
let myElem = browser.$('.nonexist')
console.log('AND NOW FAIL!')
console.log(myElem.getText())
});
テストランナーの出力:
```
[17:30:35] COMMAND POST "/wd/hub/session/05e4115c-ed66-4e47-8a01-c37208d379ab/element"
[17:30:35] DATA {"using":"css selector","value":".nonexist"}
AND NOW FAIL!
[17:30:36] COMMAND POST "/wd/hub/session/05e4115c-ed66-4e47-8a01-c37208d379ab/elements"
[17:30:36] DATA {"using":"css selector","value":".nonexist"}
[17:30:36] RESULT []
```
Seleniumサーバーのログ:
```
*** Element info: {Using=css selector, value=.nonexist}
17:30:36.133 INFO - Executing: [find elements: By.cssSelector: .nonexist])
17:30:36.155 INFO - Done: [find elements: By.cssSelector: .nonexist]
```
Webdriver IOは2つの要求を送信します。最初は宣言の後、この要素に対して何らかのアクションを適用しようとすると 'elements'要求が送信されます。
WebdriverIOはなぜ私の例で要素を2回見つけようとしているのですか?例外はスローされません、すべてが良いですが、私はちょうどこれがバグか設計によって疑問に思っていますか?
あなたの答えをありがとう!私は遅延要素が宣言に例外を投げてはならないことを理解しています。これは本当に良いアプローチです(私の意見では)。しかし、今私はなぜ宣言(最初のテストを参照してください)のPOSTリクエストを送信する必要がありますか? – Xotabu4
平均時間内に要素が現れたかどうかわからないからです。それは基本的にそれをフェッチします – ChristianB
また、要素が最初に存在する場合、私たちはドライバから取得した参照を再利用し、要素を再度フェッチする必要はありません – ChristianB