当前位置: 首页 > 面试题库 >

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

郤浩慨
2023-03-14
问题内容

我遇到了一个问题,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);


 类似资料:
  • 在监听键盘事件时,我们经常需要检查常见的键值。Vue 允许为v-on在监听键盘事件时添加按键修饰符: <!-- 只有在 `keyCode` 是 13 时调用 `vm.submit()` --> <input v-on:keyup.13="submit"> 记住所有的keyCode比较困难,所以 Vue 为最常用的按键提供了别名: <!-- 同上 --> <input v-on:keyup.e

  • 本文向大家介绍vue事件修饰符和按键修饰符用法总结,包括了vue事件修饰符和按键修饰符用法总结的使用技巧和注意事项,需要的朋友参考一下 之前关于vue事件修饰符和按键修饰符的一点分析,最近需要回顾,就顺便发到随笔上了 在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在 methods 中轻松实现这

  • 我已经通过以下链接: Selenium WebDriver-如何按住鼠标右键? 我知道在Selenium中使用Robot类很容易完成这项任务,但Robot类的主要缺点是:关键字/鼠标事件只在当前窗口实例上有效。例如,假设一个代码正在执行任何robot类事件,并且在代码执行期间,用户已移动到其他屏幕,则该屏幕上将出现关键字/鼠标事件。 因为我的测试套件在某个虚拟机上运行,所以这对我没有用处。我必须测

  • 我知道如何捕捉keyup和keydown事件。 我希望我的程序看到哪些修改键(例如:元键、控制键、alt键等)当前被按住,即使程序没有观察到这些键的按键事件。 我知道点击事件和其他事件可以告诉我当它们被触发时按下了哪些修改键,但我的程序不能等待一个修改键的出现。 我需要我的程序定期检查修饰符键(例如,每100毫秒)。我将如何做到这一点?如果有帮助,我的程序使用jQuery。

  • 问题内容: 目前,每次按键时,精灵仅移动1个像素。按住左右键时,如何使水暖工精灵不断移动? 问题答案: 您可以使用pygame.key.get_pressed来做到这一点。 例:

  • 问题内容: 我正在使用Java通过Robot类生成鼠标按下: 但是,我希望机器人在一定时间内按下按钮。我该如何实现? 问题答案: 只需在两个动作之间睡眠一下(以毫秒为单位):