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

2

你可以试试这个,

WebDriverWait wait = new WebDriverWait(driver, 300);
Actions builder = new Actions(driver);
WebElement element = wait.until(ExpectedConditions
            .elementToBeClickable(By.id("node_0_item")));
Action action = builder.moveToElement(element, 24, 0).click().build();
action.perform();

这里的 Java 文档,xOffset - Offset from the top-left corner. A negative value means coordinates right from the element.

我们要移动到 div 元素的左边,所以我们需要提供正值。我选择了 24 像素,因为在我看来,该 div 在该图像的右侧 24 像素。如果上述方法不起作用,请为 xOffset 尝试一些不同的值。希望这对你有用。

Edit# 添加了 WebDriverWait

于 2013-10-31T16:05:19.823 回答
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 回答