1

要素の特定の部分をクリックしようとしているのは、サイトが JS マジックを使用して、要素内のどこをクリックしているかを検出する必要があるためです。行をクリックすることはできません。小さな黒い三角形にある必要があります。

小さな三角形をクリックする必要があります

スパンに含まれるテキストをクリックしてみました:

テキストスパン

また、背景の一部として三角形を含む背景 div 全体をクリックしてみました。

div の背景全体

次のように、座標をクリックしてスパンに対してカーソルを移動するさまざまな組み合わせを使用しました。

WebElement we = driver.findElement(By.xpath("//span[contains(string(),'Remote PC')]"));
Actions clickTriangle= new Actions(driver);
clickTriangle.moveToElement(we).moveByOffset(-10, -5).click().perform();

この小さな三角形をクリックするにはどうすればよいですか?

編集

要求に応じて追加の HTML:

その他の HTML

ここでは、三角形が背景として div に割り当てられていることがわかります。

CSS の背景

4

3 に答える 3

0

moveToElementメソッドの説明は次のとおりです。

/**

  • 要素の左上隅からのオフセットにマウスを移動します。
  • 要素がスクロールして表示され、getBoundingClientRect を使用してその位置が計算されます。
  • @param toElement 移動先の要素。
  • @param xOffset 左上隅からのオフセット。負の値は左の座標を意味します
  • 要素。
  • @param yOffset 左上隅からのオフセット。負の値は上の座標を意味します
  • 要素。
  • @return 自己参照。

    */

したがって、要素から左にクリックしようとしている場合は、xOffsetに負の値を指定する必要があるようです。nilesh がコメントを投稿してから、Java ドキュメントが変更された可能性があります。

org.openqa.selenium.StaleElementReferenceException例外を回避するために私が見つけた唯一の解決策は、要素の検索とアクションの両方を、do-while で繰り返し実行する try-catch ブロックに入れることです。例外がなくなるまで、または無限ループの可能性を回避するために限られた回数だけ再試行を実行するまでループします。この例外は、要素を見つけてからアクションを実行するまでページが変更された場合にスローされます。

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

于 2014-11-18T18:09:18.353 に答える
0

JavascriptExecutorリンクやボタンではない要素をクリックするために使用する必要があります。だから、次のようなものを試してください

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.querySelector(\"a[id$='node_0_item'] span\").click()");
于 2013-11-01T19:31:13.547 に答える