我有一个简单的代码,单击链接即可打开一个新窗口。但是在执行脚本时,单击相当于双击同一元素,并打开2个窗口。
我正在使用InternetExplorer驱动程序
String baseURL = "URL_to_opened"; DesiredCapabilities cap = DesiredCapabilities.internetExplorer(); cap.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false); cap.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true); WebDriver driver = new InternetExplorerDriver(cap); driver.get(baseURL); driver.findElement(By.xpath("Element to be clicked")).click();
当你一起工作 Selenium 3.4.0 , IEDriverServer 3.4.0 用 IE(v 10/11) ,您可以考虑通过传递以下配置属性 DesiredCapabilities 类别:
Selenium 3.4.0
IEDriverServer 3.4.0
IE(v 10/11)
DesiredCapabilities
Native Events :由于InternetExplorerDriver仅适用于Windows,因此它尝试使用所谓的“本机”或OS级事件在浏览器中执行鼠标和键盘操作。这与对相同操作使用模拟JavaScript事件相反。使用本机事件的优点是它不依赖JavaScript沙箱,并且可以确保JavaScript事件在浏览器中正确传播。但是,当IE浏览器窗口没有焦点并且试图将鼠标悬停在元素上时,鼠标事件当前存在一些问题。 Browser Focus :挑战在于IE本身似乎不完全尊重我们发送IE浏览器窗口(WM_MOUSEDOWN和WM_MOUSEUP)的Windows消息(如果窗口没有焦点)。具体来说,被单击的元素将在其周围收到一个焦点窗口,但单击不会被该元素处理。可以说,我们根本不应该发送消息。相反,我们应该使用SendInput()API,但是该API明确要求窗口具有焦点。 您可以在此 链接中 找到有关这些事实的更多文档。
Native Events :由于InternetExplorerDriver仅适用于Windows,因此它尝试使用所谓的“本机”或OS级事件在浏览器中执行鼠标和键盘操作。这与对相同操作使用模拟JavaScript事件相反。使用本机事件的优点是它不依赖JavaScript沙箱,并且可以确保JavaScript事件在浏览器中正确传播。但是,当IE浏览器窗口没有焦点并且试图将鼠标悬停在元素上时,鼠标事件当前存在一些问题。
Native Events
Browser Focus :挑战在于IE本身似乎不完全尊重我们发送IE浏览器窗口(WM_MOUSEDOWN和WM_MOUSEUP)的Windows消息(如果窗口没有焦点)。具体来说,被单击的元素将在其周围收到一个焦点窗口,但单击不会被该元素处理。可以说,我们根本不应该发送消息。相反,我们应该使用SendInput()API,但是该API明确要求窗口具有焦点。
Browser Focus
您可以在此 链接中 找到有关这些事实的更多文档。
示例代码块:
DesiredCapabilities cap = DesiredCapabilities.internetExplorer(); cap.setCapability(InternetExplorerDriver.NATIVE_EVENTS, true); cap.setCapability(InternetExplorerDriver.REQUIREWINDOWFOCUS, true); cap.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true); WebDriver driver = new InternetExplorerDriver(cap);