Selenium WebDriver 在 IE 浏览器的文本字段中输入非常慢

Selenium WebDriver typing very slow in text field on IE browser

我是 运行 我在 IE 11 浏览器上使用 Selenium 2.43.1 的脚本之一 当脚本使用以下内容在文本字段中键入时:

element.sendKeys("string");

在 IE 浏览器中,我可以看到在文本字段中输入了字符串的一个字符,然后等待 1-2 秒再输入下一个字符。意味着输入一个字符需要 1-2 秒。

  1. 为什么用 IE 打字这么慢?
  2. 有没有其他方法可以加快打字速度?

我的问题与驱动程序架构有关,并通过下载和使用 32 位驱动程序架构修复了它。

在这里切换到 32 位是你必须做的

  1. http://selenium-release.storage.googleapis.com/index.html 下载 32 位驱动程序服务
  2. 实例化您的 InterExplorerWeDriver class 使用 InternetExplorerDriverService class 带有 32 位驱动程序的路径 服务。

    InternetExplorerDriver ieDiver = new InternetExplorerDriver(“Path to the 32 bit Explorer driver”);

如果使用生成器:

System.setProperty(“webdriver.ie.driver”,“C:\drivers\IEDriverServer.exe”);
DesiredCapabilities ieCapabilities=DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver
 .INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
ieCapabilities.setCapability("requireWindowFocus", true);
File ie_temp=newFile(“C:\Selenium\IEDrivertemp”);
InternetExplorerDriverService.Builder 
ies=newInternetExplorerDriverService.Builder();
ies.withExtractPath(ie_temp);
InternetExplorerDriverService service=ies.build();
WebDriver driver=newInternetExplorerDriver(service,ieCapabilities))

帮我解决的帖子

http://forumsqa.com/question/typing-too-slow-in-text-fields-while-replaying-tests/

这可能是您用于 运行 测试的机器的问题。如果您遇到计算机普遍滞后的情况,就会发生这种情况。

Is there an alternate way to speed up typing?

当然,您可以创建一个自定义方法来清除文本,然后使用 JavaScript 来填充该字段。 (请注意,这样做可能无法处理 "typeahead" 和 "suggestions as you type" 之类的东西)

我在使用 64 位版本的 IEDriverServer 时遇到了同样的问题。换成 32 位,运行正常。

来源: WebDriver and IE10 very slow input

我以前也有同样的问题。您可以通过

试用

Internet Options -> Connections -> LAN Settings -> Untick Automatically detect settings.

希望对您有所帮助。

对我来说,它适用于 64 位版本的 IEDriverServer。我添加了 属性 requireWindowFocus 和 "true" 值:

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
...
capabilities.setCapability("requireWindowFocus", true);
WebDriver driver = new InternetExplorerDriver(capabilities);

我使用的是 Selenium/IE 驱动程序

的 2.47 版

您可以换成 32 位版本,但如果需要 64 位版本,您可以试试这个解决方案:

  • Internet 选项 -> 安全 -> 检查所有区域 "Enable Protected Mode"
  • 转到高级 -> 安全 -> 检查 "Enable Enhanced Protected Mode"

这导致在 64 位 IE 上不再需要蜗牛输入。

下面的代码帮助我解决了这个问题。

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
...
capabilities.setCapability("requireWindowFocus", true);
WebDriver driver = new InternetExplorerDriver(capabilities);

这加快了我的速度。 IEDriverServer 2.53.1

InternetExplorerOptions options = new InternetExplorerOptions();
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
options.RequireWindowFocus = true;
driver = new InternetExplorerDriver(options);

我挣扎了将近一天才找到答案。这是因为 64 位 IE 驱动程序服务器 (IEDriverServer_x64_2.53.1)。

我切换到 IEDriverServer_Win32_2.53.1 然后它起作用了,现在超快了!

对于 IE11 64 位上的测试 运行,将 NATIVE_EVENTS 功能设置为 false 对我有效。 没有它,使用 64 位驱动程序服务器 3.0 会像报告的那样非常慢。 32 位 3.0 驱动程序服务器吞下了它应该发送的一些字符(例如 "FluentLenium" 变成了 "FlntLnum")。

以下解决了这两个问题。

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false);
WebDriver driver = new InternetExplorerDriver(capabilities);

我不确定这是否有额外的副作用。

禁用 NATIVE_EVENT 解决了我的问题

 DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
 capabilities.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false);
 driver = new InternetExplorerDriver(capabilities);

您可以更改为 32 位版本,与 64 位相比速度更快。

对于 64 位 WebDriver:

  1. 打开IE
  2. 转到 Internet 选项 → 高级 → 安全
  3. 检查 ☑ 为增强保护模式启用 64 位进程
  4. 点击应用并确定

对于 32 位 WebDriver:

  1. 打开IE
  2. 转到 Internet 选项 → 高级 → 安全
  3. 取消选中 ☐ 为增强型保护模式启用 64 位进程
  4. 点击应用并确定

奇怪的是:

  • 无论是否开启增强保护模式,该设置都是必须的
  • 除了对话框中的文字说明外,没有必要重新启动我的计算机。

我的设置:Windows10,IE 11,所有 64 位,Selenium 3.4

我使用了带有 sendKeys 方法的 Actions 对象,而不是 WebEelement.send.keys。这就像一个魅力。

我在 Windows x64 位上也遇到了与 IE11 相同的问题。我使用的是 IEDriverServer.exe 的 64 位版本(IE driver-3.7.0 和 selenium-3.7.0)。

我换成32位版本的IEDriverServer.exe后,问题就解决了

要提高发送按键功能的速度,可以执行以下步骤:-

  1. 进入project-->properties->Java compiler-->在java compliance下--取消勾选use compliance选项,将compile compliance level改成1.7然后点击申请。

它将顺利运行。

对于 IEServerDriver 3.14.0 这可以稍微加快打字速度。

WebDriver browser;
InternetExplorerOptions options = new InternetExplorerOptions();
    options.disableNativeEvents();
    options.requireWindowFocus();
browser = new InternetExplorerDriver(options);

DesiredCapabilities 方法已弃用,options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;options.RequireWindowFocus = true; 不再可用。

只是一些评论,不会解决原始问题的问题,但可能会帮助今天遇到类似问题的人:

对于其他浏览器,其驱动版本通常取决于浏览器版本,但对于IE驱动,版本取决于selenium版本!

我想强调这一点,因为它很重要,而且我没有发现答案中的任何地方都指出了这一点。直到最近我也不知道这件事。今天(创建这个post时),selenium package from public python repository is on version 3.141.0, but selenium.dev page建议下载32位IE驱动3.150.1版本;这两个版本不完全兼容,所以我遇到了同样的问题(但是,出于不同的原因)。

不幸的是,这个帖子的一些建议,即将 RequireWindowFocus 设置为 True,解决了我打字慢的问题。我说不幸的是,因为我的测试一直不稳定,而且,作为奖励,浏览器 window 仍然在所有内容的前面并且在物理上移动鼠标光标点击,使我无法并行执行多个测试.

用与我的 selenium 包版本相匹配的旧版本替换最新稳定版本的驱动程序后,我的问题肯定得到了解决,我什至不需要弄乱 RequireWindowFocus(以及我所做的所有其他选项不想)了。

继续测试!