微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何使用selenium按住非修饰键(空格键)?

我遇到了一个问题,即selenium无法按下并按住不在此列表中的键 –

Keys.SHIFT, 
Keys.CONTROL, 
Keys.ALT, 
Keys.Meta,
Keys.COMMAND, 
Keys.LEFT_ALT, 
Keys.LEFT_CONTROL,
Keys.LEFT_SHIFT

我的应用程序仅在按下空格键时显示说明.我想为此编写浏览器测试.

我正在使用ProtractorJS,但似乎这种动作的一般限制,当你尝试将keyDown用于其他键时,在selenium的任何地方 – 你会得到一个像这样的消息的异常 – “Key Down / Up事件只对修改键有意义“.

这里是Selenium Java代码链接
https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/interactions/internal/SingleKeyAction.java#L48

同样检查selenium js代码
https://github.com/SeleniumHQ/selenium/blob/master/javascript/webdriver/actionsequence.js#L301

我如何按住非修饰键?在我的情况下空格键.

更新:
感谢Florent B.回答.
经过一点修改 – 完美适合我.不得不添加切换到框架,并将事件调度到文档而不是我的案例的特定元素.

browser.switchTo().frame('workspace');  
const SIMULATE_KEY =  
"var e = new Event('keydown');" +  
"e.keyCode = 32;" +  //spacebar keycode
"e.which = e.keyCode;" +  
"e.altKey = false;" +  
"e.ctrlKey = false;" +  
"e.shiftKey = false;" +  
"e.MetaKey = false;" +  
"e.bubbles = true;" +  
"document.dispatchEvent(e);";  
browser.executeScript(SIMULATE_KEY);

解决方法:

Selenium API不提供此功能.从官方文档:

https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol

The server must process the key sequence as follows:
Each key that appears on the keyboard without requiring modifiers are sent as a keydown followed by a key up.

但是,您可以使用一段Javascript模拟关键事件:

const SIMULATE_KEY =
  "var e = new Event(arguments[0]);" +
  "e.key = arguments[1];" +
  "e.keyCode = e.key.charCodeAt(0);" +
  "e.which = e.keyCode;" +
  "e.altKey = false;" +
  "e.ctrlKey = false;" +
  "e.shiftKey = false;" +
  "e.MetaKey = false;" +
  "e.bubbles = true;" +
  "arguments[2].dispatchEvent(e);";

var target = driver.findElement(By.Id("..."));

// press the key "a"
browser.executeScript(SIMULATE_KEY, "keydown", "a", target);

// release the key "a"
browser.executeScript(SIMULATE_KEY, "keyup", "a", target);

原文地址:https://codeday.me/bug/20190702/1355026.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐