Java Webdriver按坐标单击元素两次

Java Webdriver按坐标单击元素两次,java,javascript,selenium,click,Java,Javascript,Selenium,Click,我有一个页面,允许配置某些应用程序的服务器部分。提供一些更改后,我需要单击“提交”按钮。单击“提交”按钮后,页面将重新加载,页面顶部会显示有关更改配置的消息 我想重现以下错误: 如果单击两次并快速“提交”按钮,将显示两条关于更改配置的相同消息,而不是一条。 我尝试以下几点: 1.只执行了第一次单击,然后我收到了“JavaScript错误:“无法访问死对象” 2.在这种情况下,什么也不会发生 Point p = button.getLocation(); JavascriptExecutor js

我有一个页面,允许配置某些应用程序的服务器部分。提供一些更改后,我需要单击“提交”按钮。单击“提交”按钮后,页面将重新加载,页面顶部会显示有关更改配置的消息

我想重现以下错误: 如果单击两次并快速“提交”按钮,将显示两条关于更改配置的相同消息,而不是一条。 我尝试以下几点: 1.只执行了第一次单击,然后我收到了“JavaScript错误:“无法访问死对象”

2.在这种情况下,什么也不会发生

Point p = button.getLocation();
JavascriptExecutor js = (JavascriptExecutor) driver;
String s = "(document.elementFromPoint(" + p.x + " - window.pageXOffset, " + p.y + " - window.pageYOffset)).click()";
js.executeScript(s);
js.executeScript(s);
三,。与上面相同,但没有
窗口。pageXOffset
已接收
文档。elementFromPoint(…)为null

  • 我还尝试了
    action.moveToElement(按钮).doubleClick().build().perform()
    ,但在本例中只显示一条消息

  • 您已经在Java中选择了元素,因此无需在JS中使用coords。只需将WebElement传递给JS,就可以避免
    .elementFromPoint(…)
    为空:

    js.executeScript("arguments[0].click()", button);
    
    此外,每次从SE执行新的JS时,在JS执行之前都会有一些开销时间。通过在一个JS中执行两次单击,您可以更快地进行第二次单击:

    js.executeScript("var clicks = 0; while (clicks < 2) {arguments[0].click(); clicks++;}", button);
    
    js.executeScript(“var clicks=0;while(clicks<2){arguments[0]。click();clicks++;}”,按钮);
    
    js.executeScript("var clicks = 0; while (clicks < 2) {arguments[0].click(); clicks++;}", button);