使用Selenium单击元素的特定部分

时间:2013-10-31 11:08:03

标签: java selenium webdriver

我正在尝试点击某个元素的特定部分,因为该网站必须使用一些JS魔法来检测我点击的元素中的位置。我不能单击该行,它必须在小黑三角上。

I need to click on the small triangle

我已经尝试点击包含在范围中的文字:

The text span

我也尝试点击包含三角形的整个背景div作为背景的一部分:

The entire div background

我已经使用了点击坐标和相对于跨度移动光标的各种组合,如下所示:

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:

More HTML

在这里,您可以看到三角形被指定为div的背景:

Background in CSS

3 个答案:

答案 0 :(得分:1)

你能试试吗,

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文档herexOffset - Offset from the top-left corner. A negative value means coordinates right from the element.

我们想要移动到div元素的左侧,所以我们需要提供正值。我选择了24px,因为在我看来,div是24px那个图像的右边。如果以上方法无效,请尝试使用xOffset的几个不同值。希望对你有用。

编辑#添加WebDriverWait

答案 1 :(得分:0)

您需要使用JavascriptExecutor来点击不是链接或按钮的元素。所以尝试像

这样的东西
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.querySelector(\"a[id$='node_0_item'] span\").click()");

答案 2 :(得分:0)

以下是 moveToElement 方法的说明:

/ **

  • 将鼠标移动到元素左上角的偏移处。
  • 元素滚动到视图中,其位置使用getBoundingClientRect。
  • 计算
  • @param toElement元素移动到。
  • @param xOffset从左上角偏移。负值表示从
  • 左侧的坐标
  • 元素。
  • @param yOffset从左上角偏移。负值表示上面的坐标
  • 元素。
  • @return自我引用。

    * /

因此,如果您尝试从元素中单击左键,则必须为 xOffset 提供负值。自从nilesh发表评论以来,也许Java文档发生了变化。

我发现通过 org.openqa.selenium.StaleElementReferenceException 异常的唯一解决方案是我在try-catch中搜索元素及其操作阻止我在do-while循环中重复执行,直到我再也没有异常,或直到它执行有限次数的重试以逃避无限循环的可能性。 如果页面发生更改,则抛出此异常,因为在您对其执行操作之前找到该元素。

希望这会对你有所帮助。