元素在点(x,y)处不可点击。

3

我遇到了以下异常:

org.openqa.selenium.WebDriverException: 元素在 (1057.38330078125, 673.13330078125) 处不可点击。其他元素将接收点击:

button id="ID4b6a687af6934e35b6f355f6305dc481" data-layout="hbox" class="hux-ui-button" type="button" role="button">

enter image description here

如您所见,我试图点击“Speichern”按钮。但奇怪的是错误提示说无法点击该位置,但实际上该位置就是我想要点击的按钮。

您知道为什么会出现这种情况以及我该如何解决吗?

xpath = //span[text()='Speichern'

FF = 43.0

Selenium = 2.49.


在控制台中执行 $x("//span[text()='Speichern']"),您是否可以获取单个元素?页面中是否有固定的禁止/菜单? - Florent B.
这是结果:数组[<span.hux-ui-button-text.hux-ui-text>]。带有这三个按钮的栏是相对的。 - Kevin Janke
你是否有像Twitter(https://twitter.com/search?q=twitter)那样的固定横幅?当异常发生时,尝试使用Chrome截屏以查看隐藏您按钮的内容。 - Florent B.
你的截图中那些按钮看起来是禁用的,是这样吗?也许这就是问题所在。 - Breaks Software
不,按钮没有被禁用 - 在脚本结束后,我可以点击它们并执行预期的操作。在测试过程中,我发现按钮有点像被选中了(颜色会改变,就像我悬停在上面一样),但实际上并没有被点击。 - Kevin Janke
如果你的意思是说这个栏固定在浏览器窗口中,那么你是正确的。当我滚动页面时,这个栏不会移动。 - Kevin Janke
3个回答

0

好的,你告诉驱动程序点击 span 而不是按钮。尝试修改你的 xpath 指向按钮。我认为这样会起作用:

//span[text()='Speichern']/..

它假定只有一个带有该文本的元素,并查找其父级,即您的按钮。

这是唯一具有此名称的元素。我还使用了xPath测试按钮和span - 结果相同。我还实现了等待,但结果没有改变 :( - Kevin Janke

0

所以...我刚刚问了一位专业程序员;)

我必须用以下内容更新我的单例:

public static Optional<JavascriptExecutor> getExecutor() {
WebDriver checkdriver = Driver.getWebInstance();

final JavascriptExecutor executor;

if (checkdriver instanceof JavascriptExecutor ){

    executor = (JavascriptExecutor)checkdriver;

}
else
{
    executor = null;
}
return Optional.ofNullable(executor);
}

并将其添加到实际页面对象中:

WebElement el = Driver.getInstance().findElement(By.xpath(".//span[text()='Speichern']/parent::button"));

Driver.getExecutor().ifPresent( (executor) -> executor.executeScript("arguments[0].click()", el) ); 

现在它可以工作了。谢谢:)


0

异常清楚地说明您将会在span上点击,而button元素将接收到该点击事件。因此,您需要像下面这样单击button

driver.findElement(By.cssSelector("button.hux-ui-button")).click();

或者

driver.findElement(By.xpath(".//span[text()='Speichern']/parent::button")).click();

编辑:如果您仍然遇到相同的问题,请尝试使用JavascriptExecutor执行以下单击操作:

WebElement el = driver.findElement(By.xpath(".//span[text()='Speichern']/parent::button"));
((JavascriptExecutor)driver).executeScript("arguments[0].click()", el);

@KevinJanke 如果你仍然遇到同样的问题,尝试使用JavascriptExecutor来执行点击操作,参见编辑后的答案..:) - Saurabh Gaur
我犯了一个错误 - 使用JavascriptExecutor时,我遇到了不同的错误:java.lang.ClassCastException: com.selenium.framework.base.Driver无法转换为org.openqa.selenium.JavascriptExecutor。我不得不稍微更改代码,因为Driver是我的框架中的单例。 - Kevin Janke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接