3

Web要素を右クリックする必要がありました。次の方法を試しました。

コードを簡単にするwebElemために、 は有効な を参照すると仮定しますBrowser().Page().WebElement()

1)

Set obj=createobject("mercury.devicereplay")

getX = webElem.GetROProperty("abs_x")
getY = webElem.GetROProperty("abs_y")


'obj.MouseClick getX, getY,RIGHT_MOUSE_BUTTON

上記のコードは機能しませんでした

2)

webElem.RightClick

このコードも機能しませんでした

3)次のコードが機能しました:

Setting.WebPackage("ReplayType") = 2

webElem.RightClick

Setting.WebPackage("ReplayType") = 1

私の質問は次のとおりです。

  1. 右クリックを機能させるためにデバイスの再生タイプを変更する必要があったのはなぜですか? 一方、クリックメソッドは正常に機能します。

  2. Mercury.DeviceReplayオブジェクトを介して、MouseClickメソッドが機能しなかったのはなぜですか?

  3. FireEventメソッドでこれを行うにはどうすればよいですか?(FireEvent方法を詳しく説明してください。参考までに:私はQTPを初めて使用します)

  4. これを行う他の方法は何ですか?

一部の方法が機能し、一部の方法が機能しない理由を誰か説明してください。

ありがとう、スリタム

4

1 に答える 1

3

デフォルトでは、QTPはイベント再生を使用してWeb要素でほとんどのステップを実行します。これは、基になるDOM要素にDOMイベントを送信することを意味します。人がWebページを操作すると、ブラウザは多くのDOMイベント(たとえばmousemove mousedown contextmenu)を生成し、Webアプリケーションは必要な動作をトリガーするためにこれらのイベントのいずれかに依存する場合があります。QTPは、各Webアプリケーションがどのイベントを使用するかを知らないため、QTPの開発者が興味深いと考えたサブセットを再現します(たとえば、ClickQTPリプレイmousedownの場合、mouseupおよびclick。どこかRightClickにイベントがありcontextmenu(順序は覚えていません)、いいえclick

#2で試したことが失敗したと考えられる理由は、QTPによって作成されなかった、アプリケーションが予期する追加のイベントがあるためです。

ReplayType=2(ケース#3のように)指定すると、 QTPのWebパッケージにデバイスの再生を使用するように指示します。これは、マウスを要求された場所に物理的に移動して操作を実行することを意味します。これは、ブラウザが実際の人がマウスを動かしていると見なし、人間が操作を実行しているときとまったく同じイベントを再現することを意味します。

ケース#1(明示的にを使用)とまったく同じ結果が得られるはずDeviceReplayです。それでも失敗した理由は2つ考えられます。

  1. コードサンプルでは、​​行が'obj.MouseClick getX, getY,RIGHT_MOUSE_BUTTONコメントアウトされています。これはおそらくコピー/貼り付けエラーですが、これも実行しようとした場合は、何も起こらなかった理由が説明されます。
  2. より可能性の高い説明は、クリックを使用abs_xabs_yて再生していることです。これはの左上隅でありWebElement、おそらくこれは正しいDOM要素に到達していません。デバイス再生モードでRightClickの実装との違いは、 (デフォルトで)要素の幅と高さを取得して実行する途中でクリックすることです。WebElementobj.MouseClick getX+(width/2), getY+(height/2), RIGHT_MOUSE_BUTTON

右クリックを実行する別の方法があり、それは次のようになります。

webElem.Click micNoCoordinates, micNoCoordinates, micRightBtn

しかしwebElem.RightClick、少なくともうまくいくはずなので、私はそれに対してお勧めします。

于 2012-12-11T08:14:56.340 に答える