失败:使用 ChromeDriver Chrome 和 Protractor 调用 sendKeys 到 ENTER 和其他击键时 sendKeysToActiveElement 错误
Failed: sendKeysToActiveElement error while invoking sendKeys to ENTER and other keystrokes using ChromeDriver Chrome with Protractor
在我自动更新到 Chrome 76 后,我今天使用 sendKeys 按下 Enter 或 Tab 的 Protractor 测试失败了。
昨天在 Chrome 75.
上找到了这个工作
这是曾经有效的代码:
browser.actions().sendKeys(protractor.Key.TAB).perform();
错误信息是
Failed: sendKeysToActiveElement
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'DESKTOP-6JGLC4V', ip: '192.168.0.5', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_221'
Driver info: driver.version: unknown
我们的 Angular 应用程序有下拉菜单,您必须在下拉菜单外单击或按 Tab 键将其关闭。所以我不会将击键发送到输入元素。我试过 $('body').sendKeys(protractor.Key.TAB);
但这似乎不起作用。
这个错误信息...
Failed: sendKeysToActiveElement
...暗示 ChromeDriver 无法调用 sendKeys()
到 ActiveElement。
当 ChromeDriver / Chrome 切换到 [=48= 时,这个问题开始浮出水面]W3C支持。
@AutomatedTester 在讨论 UnsupportedOperationError: sendKeysToActiveElement with sendkeys 中提到,这可能是 Actions class 中 Client[= 中的问题58=] 绑定。
There should be a little shim in the bindings that make sure the same functionality is given on older commands that have been removed. This has been implemented in the core selenium binding.
Pythonexample:
def send_keys(self, *keys_to_send):
"""
Sends keys to current focused element.
:Args:
- keys_to_send: The keys to send. Modifier keys constants can be found in the
'Keys' class.
"""
typing = keys_to_typing(keys_to_send)
if self._driver.w3c:
for key in typing:
self.key_down(key)
self.key_up(key)
else:
self._actions.append(lambda: self._driver.execute(
Command.SEND_KEYS_TO_ACTIVE_ELEMENT, {'value': typing}))
return self
def send_keys_to_element(self, element, *keys_to_send):
"""
Sends keys to an element.
:Args:
- element: The element to send keys.
- keys_to_send: The keys to send. Modifier keys constants can be found in the
'Keys' class.
"""
self.click(element)
self.send_keys(*keys_to_send)
return self
解决方案
@barancev 已经通过提交 Renaming back 'py' directory, use of 'legacy_create_init' argument 合并了所需的更改,这个问题将在 ChromeDriver v77.0[=58 的下一个版本中得到彻底解决=] / Chrome v77.0.
好消息是 Chrome驱动程序 v77.0 已经发布,其中包含以下修复。来自 Release Notes of ChromeDriver v77.0:
- 已解决的问题 2975:按键(CONTROL、SHIFT 等)的 Webdriver 操作在 ChromeDriver 75.0.3770.8 [Pri-2]
中不起作用
- 已解决问题 2981:ChromeW3C 模式下的驱动程序在操作 API 调用 [Pri-2]
之间丢失鼠标状态
结尾
Protractor.Key.Enter is not working in ChromeDriver v75.0.3770.8
已升级到 chromeDriver 77,但仍 运行 遇到与上述相同的问题。
await elem.sendKeys(protractor.Key.TAB);
也试过:await browser.actions().sendKeys(protractor.Key.TAB).perform();
`- Failed: sendKeysToActiveElement
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'GC02XYZ...', ip: 'fe80:xyz...', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.6', java.version: '11.0.1'
Driver info: driver.version: unknown`
`chromeDriver -v
ChromeDriver 77.0.3865.40`
使用chrome74+时请在configuration.js文件
中添加以下内容
exports.config = {
seleniumAddress : 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
capabilities:{
'browserName': 'chrome',
'goog:chromeOptions': {
w3c: false
}
}
};
备注:
参考这个 link
https://github.com/angular/protractor/issues/5274#issuecomment-522258213
在我自动更新到 Chrome 76 后,我今天使用 sendKeys 按下 Enter 或 Tab 的 Protractor 测试失败了。
昨天在 Chrome 75.
上找到了这个工作这是曾经有效的代码:
browser.actions().sendKeys(protractor.Key.TAB).perform();
错误信息是
Failed: sendKeysToActiveElement
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'DESKTOP-6JGLC4V', ip: '192.168.0.5', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_221'
Driver info: driver.version: unknown
我们的 Angular 应用程序有下拉菜单,您必须在下拉菜单外单击或按 Tab 键将其关闭。所以我不会将击键发送到输入元素。我试过 $('body').sendKeys(protractor.Key.TAB);
但这似乎不起作用。
这个错误信息...
Failed: sendKeysToActiveElement
...暗示 ChromeDriver 无法调用 sendKeys()
到 ActiveElement。
当 ChromeDriver / Chrome 切换到 [=48= 时,这个问题开始浮出水面]W3C支持。
@AutomatedTester 在讨论 UnsupportedOperationError: sendKeysToActiveElement with sendkeys 中提到,这可能是 Actions class 中 Client[= 中的问题58=] 绑定。
There should be a little shim in the bindings that make sure the same functionality is given on older commands that have been removed. This has been implemented in the core selenium binding.
Pythonexample:
def send_keys(self, *keys_to_send): """ Sends keys to current focused element. :Args: - keys_to_send: The keys to send. Modifier keys constants can be found in the 'Keys' class. """ typing = keys_to_typing(keys_to_send) if self._driver.w3c: for key in typing: self.key_down(key) self.key_up(key) else: self._actions.append(lambda: self._driver.execute( Command.SEND_KEYS_TO_ACTIVE_ELEMENT, {'value': typing})) return self def send_keys_to_element(self, element, *keys_to_send): """ Sends keys to an element. :Args: - element: The element to send keys. - keys_to_send: The keys to send. Modifier keys constants can be found in the 'Keys' class. """ self.click(element) self.send_keys(*keys_to_send) return self
解决方案
@barancev 已经通过提交 Renaming back 'py' directory, use of 'legacy_create_init' argument 合并了所需的更改,这个问题将在 ChromeDriver v77.0[=58 的下一个版本中得到彻底解决=] / Chrome v77.0.
好消息是 Chrome驱动程序 v77.0 已经发布,其中包含以下修复。来自 Release Notes of ChromeDriver v77.0:
- 已解决的问题 2975:按键(CONTROL、SHIFT 等)的 Webdriver 操作在 ChromeDriver 75.0.3770.8 [Pri-2] 中不起作用
- 已解决问题 2981:ChromeW3C 模式下的驱动程序在操作 API 调用 [Pri-2] 之间丢失鼠标状态
结尾
Protractor.Key.Enter is not working in ChromeDriver v75.0.3770.8
已升级到 chromeDriver 77,但仍 运行 遇到与上述相同的问题。
await elem.sendKeys(protractor.Key.TAB);
也试过:await browser.actions().sendKeys(protractor.Key.TAB).perform();
`- Failed: sendKeysToActiveElement
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'GC02XYZ...', ip: 'fe80:xyz...', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.6', java.version: '11.0.1'
Driver info: driver.version: unknown`
`chromeDriver -v
ChromeDriver 77.0.3865.40`
使用chrome74+时请在configuration.js文件
中添加以下内容exports.config = {
seleniumAddress : 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
capabilities:{
'browserName': 'chrome',
'goog:chromeOptions': {
w3c: false
}
}
};
备注: 参考这个 link https://github.com/angular/protractor/issues/5274#issuecomment-522258213