我正在尝试点击某个元素的特定部分,因为该网站必须使用一些JS魔法来检测我点击的元素中的位置。我不能单击该行,它必须在小黑三角上。
我已经尝试点击包含在范围中的文字:
我也尝试点击包含三角形的整个背景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:
在这里,您可以看到三角形被指定为div的背景:
答案 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文档here,xOffset - 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 方法的说明:
/ **
@return自我引用。
* /
因此,如果您尝试从元素中单击左键,则必须为 xOffset 提供负值。自从nilesh发表评论以来,也许Java文档发生了变化。
我发现通过 org.openqa.selenium.StaleElementReferenceException 异常的唯一解决方案是我在try-catch中搜索元素及其操作阻止我在do-while循环中重复执行,直到我再也没有异常,或直到它执行有限次数的重试以逃避无限循环的可能性。 如果页面发生更改,则抛出此异常,因为在您对其执行操作之前找到该元素。
希望这会对你有所帮助。