Selenium 在执行 jscript 命令后挂起

Selenium hangs after executing jscript command

我正在尝试单击执行以下方法的动态菜单:

public void clicaItemSubMenu(String item) throws InterruptedException{
    String link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]")).getAttribute("Id");
    driver.get("javascript:document.getElementById('" + link + "').click()");
}

代码工作正常,正在打开菜单,然后,Selenium 在 FireFox 或 Internet Explorer 中挂起。如果我调试代码,则不会发生此问题。我试图处理一些等待的事情,但没有成功。有人可以帮忙吗?

实际上WebDriver::get()用于在当前浏览器window中加载一个新的网页。这是使用 HTTP GET 操作完成的,当您想使用 JavaScript.

执行单击元素时,该方法将阻塞直到加载完成

您应该尝试使用 JavascriptExecutor::executeScript(),它在当前选定帧的上下文中执行 JavaScript 或 window,如下所示:-

public void clicaItemSubMenu(String item) throws InterruptedException{
  WebElement link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]"));
  ((JavascriptExecutor)driver).executeScript("arguments[0].click()", link);
 }

注意 :- 您可以使用 WebElement::click() 方法直接单击 WebElement,就像 link.click() 一样,而无需使用 JavascriptExecutor