【问题标题】:Cannot click element with IEDriverServer无法使用 IEDriverServer 单击元素
【发布时间】:2015-06-24 10:40:32
【问题描述】:

我在网页上有一个元素,只有在单击其父元素后才可见。因此,单击演示列表中的演示后,会显示一排代表所选演示操作的图标。以下代码适用于 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 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;

【问题讨论】:

  • 曾经参考这个:**stackoverflow.com/questions/30660578/…**.
  • 这是使 IEDriverServer 正常工作所需配置的一部分。如果不这样做,我就不会达到现在的地步。
  • 使用 WebDriverWait wait = new WebDriverWait(driver, 10); 和 ExpectedConditions
  • waitForElementIsDisplayed(demoReservation_btn) 已经在等待显示元素。
  • 如何实例化 IEDriver?

标签: java selenium selenium-webdriver webdriver


【解决方案1】:

尝试禁用 IE 的 Native 事件

DesiredCapabilities cap = DesiredCapabilities.internetExplorer();
cap.setCapability("nativeEvents",false);
driver  = new InternetExplorerDriver(cap);

在 C# 版本中使用它会有更好的结果。阅读this,了解您可能需要这样做的原因。

【讨论】:

  • 不错的 Saifur,第一次工作,也非常感谢您提供的解释链接。
  • 是的。这是 Selenium C# 绑定的核心贡献者之一 JimEvans 对 Selenium 和 IEDriver 给出的最简洁的说明
  • 感谢您的回答。为我工作!
猜你喜欢
  • 2017-07-25
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 2018-05-26
  • 2017-10-11
  • 2022-12-09
相关资源
最近更新 更多