【发布时间】:2016-07-15 22:29:38
【问题描述】:
我遇到了一个问题,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);
【问题讨论】:
-
有趣 - 我对规范 (w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions) 的阅读似乎并不能充分证明当前行为的合理性。
标签: javascript selenium selenium-webdriver webdriver protractor