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

我遇到了一个问题,selenium无法按住此列表中没有的键-

Keys.SHIFT, 

Keys.CONTROL,

Keys.ALT,

Keys.META,

Keys.COMMAND,

Keys.LEFT_ALT,

Keys.LEFT_CONTROL,

Keys.LEFT_SHIFT

我的应用程序仅在按住空格键时显示指令。我想为此编写浏览器测试。

我正在使用ProtractorJS,但是当您尝试将keyDown用作其他键时,似乎在selenium的任何地方都存在这种限制,这在您的selenium中无处不在-

这样的消息会产生异常-“ Key Down / Up事件仅对修饰键有意义”。

这是Selenium

Java代码的链接:https

:

//github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/interactions/internal/SingleKeyAction.java#L48

并同样检查seleniumjs代码: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

服务器必须按以下方式处理键序列:键盘上出现的每个不需要修改键的键都作为键按下(keydown)和键向上(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);

以上是 如何使用selenium按住非修饰键(空格键)? 的全部内容, 来源链接: utcz.com/qa/426323.html

回到顶部