【问题标题】:WebDriver, How do I prevent InternetExplorerDriver from taking control of the mouse pointerWebDriver,如何防止 InternetExplorerDriver 控制鼠标指针
【发布时间】:2014-03-11 23:08:46
【问题描述】:

每当我在 IE(使用 InternetExplorerDriver)中运行 WebDriver 测试时,需要单击网页元素时,InternetExplorerDriver 就会接管我的鼠标。

当我在 Chrome 或 Firefox 中运行测试时,不会发生这种情况。有没有办法防止 IE 测试控制鼠标指针?

导致鼠标指针“被盗”的示例代码:

public void clickButtonNamed(String buttonName) {
    driver.findElement(By.xpath("//div[contains(text(),'" + buttonName + "')]")).click();
}

public void dragAndDropElement(WebElement source, WebElement target) throws InterruptedException {
    action.dragAndDrop(source,target).build().perform();
}

//IE Driver initialization
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS,true);
WebDriver driver = new InternetExplorerDriver(caps);

【问题讨论】:

  • IEDriver 初始化添加。
  • @urbanaut 你对这个问题做了哪些研究?有许多 blog posts 准确地解释了 IE 驱动程序在做什么,更重要的是,为什么。 IE 的本质是,在 IE 中使用所谓的“本机事件”没有优雅的方法。
  • @Jim 实际上,我确实读过那篇文章和你的几篇文章。 IEDriver 如此不可预测且不一致,这是我发现的唯一解决方法(需要窗口焦点),可以让它以任何一致性单击元素。不幸的是,这样做会接管鼠标控制(chromedriver 或 firefoxdriver 都不会发生这种情况)。
  • ...或者这只是 IE 本身(而不是驱动程序)的固有问题,无论哪种方式都可能令人沮丧。
  • 您可以随时关闭本地事件,正如上面链接的第二篇博文所建议的那样。底线是 IE 不提供任何高保真方式来模拟用户输入。驱动程序受操作系统和浏览器允许的限制。如果您有其他模拟用户输入的方法,我们将不胜感激地接受拉取请求。

标签: java internet-explorer selenium webdriver mouse


【解决方案1】:

您是否有理由将此属性 InternetExplorerDriver.REQUIRE_WINDOW_FOCUS 设置为 true?这就是 IEDriver 要求 IE 控制您的指针的原因。

要修复它,只需将其删除或将其设置为 false。这是在2.28.0.3 中介绍的,这是来自 CHANGELOG 的引述:

在 IE 驱动程序中引入了“requireWindowFocus”功能。当与“nativeEvents”功能结合使用时, 驱动程序将尝试将当前 IE 窗口带到 执行鼠标或键盘事件之前的前台。

另外,当 requireWindowFocus 功能设置为 true,高级用户 交互现在将使用 Windows SendInput() API 来执行 的相互作用。要启用此行为,请设置
在创建 IE 驱动程序。此新功能的默认值为“false”。这个 功能目前被认为是非常实验性的;利用 风险自负。

【讨论】:

  • IE 快把我逼疯了。不幸的是,如果我不包含“REQUIRE_WINDOW_FOCUS”功能,那么我无法让 IEDriver 单击我正在测试的 Web 应用程序中的任何内容。 :-s
  • @urbanaut:是的,你可能想问另一个问题来描述你的问题,看看它到底出了什么问题。同时,可能需要一个单独的环境来测试IE。例如,创建一个新的 Windows 用户并在该帐户桌面上运行。
  • 谢谢,很好的建议,但我也试过了。我创建了一个 Windows 7 VirtualBox 并尝试在该环境中专门针对 IE 进行测试。在那里,我在 IE 上也遇到了同样的问题。
  • @urbanaut:抱歉,我的意思是在启用了REQUIRE_WINDOW_FOCUS 的单独环境中运行。那么你就不用关心它是否接管了鼠标指针。
  • 哦,是的,这可能是我必须做的。
【解决方案2】:

使用此设置将避免 IE 在执行操作时接管鼠标控制 -

InternetExplorerOptions ieOp = new InternetExplorerOptions(); ieOp.disableNativeEvents();

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多