Webdriverio: moveTo代替?

作成日 2017年06月12日  ·  27コメント  ·  ソース: webdriverio/webdriverio

leftClickまたはmoveToまたはmoveToObjectを使用しようとすると、次の警告が表示されます。
WARNING: the "moveTo" command will be deprecated soon. Please use a different command in order to avoid failures in your test after updating WebdriverIO.

選択肢は何ですか? moveToは何に置き換えられましたか?

最も参考になるコメント

moveToとmoveToObjectが機能しないのに、ドキュメントに残っているのはなぜですか?
もしそれが残っているなら、Firefoxでは動作しないという通知があればいいのですが...

http://webdriver.io/api/protocol/moveTo.html
http://webdriver.io/api/action/moveToObject.html

全てのコメント27件

公開されている場合は、おそらくアクションAPIを使用する必要があります。 ぜひご参加くださいGitterこの種の質問のために。 これは必ずしも問題ではありません。

Action APIが実装されるまで、この代替案の質問を2番目にしたいと思います。 一日中Gitterで過ごしましたが、誰も解決策を持っていないようです。

ない

Action APIがwebdriverioに実装される大まかなタイムラインはありますか?

GeckodriverとChromedriverが完全にサポートしている場合

代替手段がまだないのに、どうして何かが非推奨になるのですか? それでは、非推奨の警告が出るのは少し早いのではないでしょうか。

代替手段がまだないのに、どうして何かが非推奨になるのですか?

別の方法がありますが、ブラウザドライバではサポートされていません。

それでは、非推奨の警告が出るのは少し早いのではないでしょうか。

後から考えると、Firefoxのみが影響を受けたため、すべてのブラウザに非推奨の警告を追加するのは誤りでした。 これはすぐに更新します。 エラーメッセージが冗長すぎる場合は、最新のv4.7.xバージョンを使用してください。

エラーメッセージが冗長すぎる場合は、最新のv4.7.xバージョンを使用してください。

それでは、このスレッドの更新に注意を払いながら、v4.7.xを使い続けます。 ありがとう

明確にするために、moveToObjectはFirefoxで失敗しますか?

明確にするために、moveToObjectはFirefoxで失敗しますか?

はい、actionsコマンドを使用する必要があります!

これは、アクションプロトコルに基づいて、chromeとfirefoxで機能するmoveToObjectの実装です。

browser.addCommand('moveToElement', function(selector, x, y) {

       if (this.desiredCapabilities.browserName === 'firefox') {
           return this.getLocation(selector)
           .then(function(location) {

              // setting mouse position to the top-left corner of the browser, see this idea of <strong i="6">@mhemesath</strong> on gitter
              // https://gitter.im/webdriverio/webdriverio?at=5a24be23cc1d527f6be94b49
              return this.execute(function () {
                  // eslint-disable-next-line no-var
                  var div = document.createElement('div');
                  document.body.appendChild(div);
                  div.id = 'wdioMouseReset';
                  div.style.position = 'absolute';
                  div.style.top = 0;
                  div.style.left = 0;
                  div.style.width = '1px';
                  div.style.height = '1px';
                  div.style.zIndex = '9999999';
                  // eslint-disable-next-line func-names, prefer-arrow-callback
                  div.addEventListener('click', function () {
                  document.body.removeChild(div);
                  })
              })
              .click('#wdioMouseReset')
              .actions(
                  [{
                      "type": "pointer",
                      "id": "finger1",
                      "parameters": {"pointerType": "mouse"},
                      "actions": [
                          {"type": "pointerMove", "duration": 0, "x": location.x + 2, "y": location.y + 2}
                      ]
                  }]
              )
          });
       } else {
           return this.moveToObject(selector, x, y);
       }
   });

奇妙なことに、Chromeではローカルで問題なく動作しますが、SauceLabsで実行すると失敗します。

編集:つまり、 moveToObjectはSauceLabsでは機能しません。 さらに、FirefoxはSauceLabのアクションアプローチを好まなかったようですが、Chromeと同じようにローカルでテストすることはできませんでした。

これは、アクションプロトコルに基づいて、chromeとfirefoxで機能するmoveToObjectの実装です。

アクションプロトコルがサポートされている場合は、それを使用して、必要に応じて、マウスをビューポートの(0,0)に移動するか、まったく移動しないようにする必要があります。 divインジェクションハックが使用されたのは、アクションAPIがまだChromeでサポートされておらず、非推奨のAPIに依存したくなかったためです。

アクションのx座標とy座標は現在のマウスの位置を基準にしていると思ったので、アプローチを使用してゼロに設定しましたが、それなしで試してみます。
ありがとう。

アクションに関するドキュメントを読むと、pointerMoveoriginが省略されている場合はデフォルトでビューポートになっていると書かれています。

ポインタ移動の場合:
期間:ミリ秒単位の整数
オリジン:(a)文字列、ビューポートまたはポインタのいずれか、または(b)Web要素を表すオブジェクト。 原点が省略されている場合、デフォルトでビューポートになります。
x:原点に基づくビューポート、ポインタ、または要素のいずれかを基準にした、移動先の整数、x値
y:原点に基づくビューポート、ポインタ、または要素のいずれかを基準にした、移動先の整数、y値
ポインタキャンセルの場合:このアクションはまだ仕様で定義されていません

確かに、それが機能するはずよりも、ありがとう!

要素の特定のオフセット位置をクリックしたい場合はどうなりますか? 上記の@gsantaメソッドは、カーソルをその位置に移動するために機能しますが、その位置でクリックすることはできません。

クリックイベントをディスパッチしようとしましたが、クリックする場所を指定する方法がわかりません。 誰かがこれを手伝ってもらえますか? ありがとう!

複数のアクションをactions配列に入れて、移動とクリックをシミュレートできます。

"actions": [
            {"type": "pointerMove", "duration": 0, "x": 100, "y": 100},
            {"type": "pointerDown", "button": 0},
            {"type": "pause", "duration": 500},
            {"type": "pointerUp", "button": 0}
        ]

@gsanta
私はあなたの実装の使い方を理解しようとしている初心者です。 この実装の使用方法に関するサンプルコードを投稿していただけますか?

考え:これは、webdriverがこれらのものに一貫したAPIラッパーを提供するのに本当に良い場所のようです。 開発者として、必要に応じてアクションに移行しても問題ありませんが、 moveMouseToを実行でき、テスト対象のブラウザーに関係なく機能します。 内部的には、コマンドをサポートされているブラウザーAPIに変換するのは、ブラウザーでネストされたswitchステートメントになります。

これは次のように回避できます。

browser.selectorExecute(element.selector, function (elem) {
    elem[0].scrollIntoView();
  });

ChromeのアクションAPIがまもなくリリースされる可能性があるようです: https

@mhemesathそれは良いニュースです

moveToとmoveToObjectが機能しないのに、ドキュメントに残っているのはなぜですか?
もしそれが残っているなら、Firefoxでは動作しないという通知があればいいのですが...

http://webdriver.io/api/protocol/moveTo.html
http://webdriver.io/api/action/moveToObject.html

それができたことに私は驚いel.moveToは私のために働いているようだ:

$('.header__yourMum').moveTo();

それが_did_であることに驚いたが、 el.moveToは私のために働いているようだ:

$('.header__yourMum').moveTo();

Firefoxで機能しますか?

@ ManikanthErukulla1わからない、私は今のところクロムを使用しています。

このページは役に立ちましたか?
0 / 5 - 0 評価