17

現在、ライブチャート上でマーカーの出現をチェックして設定されたポイント()にカーソルを移動しようとしています。このポイントorg.openqa.selenium.Pointからは詳細はわかりませんが、のX座標とY座標は見つかります。

マウスに移動して上記のポイントにカーソルを合わせ、基になるJavaScriptメニューを開くにはどうすればよいですか?

現在のコード

//finds marker on the current web page

Point image = page.findImage("C:\\Pictures\\marker.png") ;

//move mouse to this x,y location 

driver.getMouse().mouseMove((Coordinates) image);

Pointにキャストできないため、これは機能しませんorg.openqa.selenium.interactions.internal.Coordinates

4

9 に答える 9

15

私見Robot.classに注意を払う必要があります

それでもマウス ポインターを物理的に動かしたい場合は、Robot クラスを使用して別のアプローチを取る必要があります。

  Point coordinates = driver.findElement(By.id("ctl00_portalmaster_txtUserName")).getLocation();
  Robot robot = new Robot();
  robot.mouseMove(coordinates.getX(),coordinates.getY()+120);

Webdriver はドキュメント座標を提供しますが、ロボット クラスは画面座標に基づいているため、ブラウザ ヘッダーを補正するために +120 を追加しました。
画面座標: ユーザーのコンピューター画面の左上隅から測定された座標です。座標 (0,0) を取得することはめったにありません。これは通常、ブラウザー ウィンドウの外側にあるためです。これらの座標が必要になるのは、ユーザーがクリックした場所に新しく作成されたブラウザー ウィンドウを配置する場合のみです。すべてのブラウザで、これらは と にevent.screenXありevent.screenYます。
ウィンドウ座標: これらは、ブラウザーのコンテンツ領域の左上隅から測定された座標です。ウィンドウが縦または横にスクロールされている場合、これはドキュメントの左上隅とは異なります。これが必要になることはめったにありません。すべてのブラウザで、これらは event.clientX と event.clientY にあります。
ドキュメント座標: HTML ドキュメントの左上隅から測定された座標です。これらは、ドキュメントが定義されている座標系であるため、最も頻繁に使用する座標です。

詳細はこちら

これがお役に立てば幸いです。

于 2012-10-19T15:59:32.767 に答える
14

org.openqa.selenium.interactions.Actions.classがおそらく正常に動作するのに、なぜjava.awt.Robotを使用するのですか? 言ってるだけ。

Actions builder = new Actions(driver);

builder.keyDown(Keys.CONTROL)
   .click(someElement)
   .moveByOffset( 10, 25 );
   .click(someOtherElement)
   .keyUp(Keys.CONTROL).build().perform();
于 2014-03-28T18:14:22.973 に答える
0

MoveToElement を使用すると、任意のポイントを見つけたりクリックしたりできます。最初のパラメーターを定義するだけで済みます。これは、WindowsDriver をインスタンス化するときに作成されるセッション (winappdriver) またはドライバー (他の方法) にすることができます。それ以外の場合は、グリッド (私の場合)、リスト、パネル、または必要なものを最初のパラメーターとして設定できます。

注: 最初のパラメーター要素の左上は、位置 X = 0 および Y = 0 になります。

   Actions actions = new Actions(this.session);
    int xPosition = this.session.FindElementsByAccessibilityId("GraphicView")[0].Size.Width - 530;
    int yPosition = this.session.FindElementsByAccessibilityId("GraphicView")[0].Size.Height- 150;
    actions.MoveToElement(this.xecuteClientSession.FindElementsByAccessibilityId("GraphicView")[0], xPosition, yPosition).ContextClick().Build().Perform();
于 2019-06-27T04:06:10.617 に答える
-1
Robot robot = new Robot();
robot.mouseMove(coordinates.x,coordinates.y+80);

Rotbot は良い解決策です。わたしにはできる。

于 2012-11-14T09:26:55.597 に答える