【问题标题】:How to press and hold non-modifier key (space key) using selenium?如何使用硒按住非修饰键(空格键)?
【发布时间】: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);

【问题讨论】:

标签: javascript selenium selenium-webdriver webdriver protractor


【解决方案1】:

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);

【讨论】:

    【解决方案2】:

    如果您无法使用 selenium 找到答案,您可以使用其他工具(例如 AutoItAutoHotKey)触发脚本,只需按住按键即可。

    这很麻烦,但它可能是您唯一的选择。

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 2022-09-27
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      相关资源
      最近更新 更多