无法使用 IEDriverServer 单击元素
Cannot click element with IEDriverServer
我在网页上有一个元素,只有在单击其父元素后才会显示。因此,在单击演示列表中的一个演示后,会显示一行代表所选演示操作的图标。以下代码适用于 webdriver 和 chromedriver:
demo.click(); //click demo
waitForElementIsDisplayed(demoReservation_btn); //wait until reservation icon is displayed
demoReservation_btn.click(); //click icon
最初我遇到了 StaleElementReferenceException,我试图通过在 while 循环中放置一个 try/catch 块来解决此问题,该块将继续循环直到单击图标。这导致 IEDriverServer 在几个循环后崩溃。
我也试过像这样把它包装在一个动作中:
Action action = new Action(driver);
action.click(demo).click(demoReservation_btn).build().perform()
这会导致 NoSuchElementException。
我知道 documentation 中提到了一些关于浏览器焦点和悬停在元素上的问题,但我不认为这是问题所在。我尝试了其他一些方法,例如将 moverToElement 添加到操作中,将鼠标悬停在元素上,但没有成功。我相信一种可能的解决方案是使用 javascript 执行程序,但我想尽可能避免这种方法,还有其他建议吗?
编辑
IEDriverServer 设置:
File file = new File("IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
driver = new InternetExplorerDriver();
driver.manage().window().maximize();
return driver;
尝试禁用 IE 的本机事件
DesiredCapabilities cap = DesiredCapabilities.internetExplorer();
cap.setCapability("nativeEvents",false);
driver = new InternetExplorerDriver(cap);
我在 C# 版本中使用它获得了更好的结果。阅读 this 了解您可能需要这样做的原因。
我在网页上有一个元素,只有在单击其父元素后才会显示。因此,在单击演示列表中的一个演示后,会显示一行代表所选演示操作的图标。以下代码适用于 webdriver 和 chromedriver:
demo.click(); //click demo
waitForElementIsDisplayed(demoReservation_btn); //wait until reservation icon is displayed
demoReservation_btn.click(); //click icon
最初我遇到了 StaleElementReferenceException,我试图通过在 while 循环中放置一个 try/catch 块来解决此问题,该块将继续循环直到单击图标。这导致 IEDriverServer 在几个循环后崩溃。
我也试过像这样把它包装在一个动作中:
Action action = new Action(driver);
action.click(demo).click(demoReservation_btn).build().perform()
这会导致 NoSuchElementException。
我知道 documentation 中提到了一些关于浏览器焦点和悬停在元素上的问题,但我不认为这是问题所在。我尝试了其他一些方法,例如将 moverToElement 添加到操作中,将鼠标悬停在元素上,但没有成功。我相信一种可能的解决方案是使用 javascript 执行程序,但我想尽可能避免这种方法,还有其他建议吗?
编辑
IEDriverServer 设置:
File file = new File("IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
driver = new InternetExplorerDriver();
driver.manage().window().maximize();
return driver;
尝试禁用 IE 的本机事件
DesiredCapabilities cap = DesiredCapabilities.internetExplorer();
cap.setCapability("nativeEvents",false);
driver = new InternetExplorerDriver(cap);
我在 C# 版本中使用它获得了更好的结果。阅读 this 了解您可能需要这样做的原因。