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

2024-02-23

我遇到了一个问题,硒无法按住不在此列表中的键 -

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

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

我正在使用 ProtractorJS,但似乎此类操作的一般限制,在 selenium 中的任何地方,当您尝试将 keyDown 用于其他键时 - 您将收到类似这样的消息的异常 - “Key Down / Up 事件仅对修饰键有意义”。

这是 Selenium Java 代码的链接:https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/interactions/internal/SingleKeyAction.java#L48 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 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 https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol

服务器必须按如下方式处理按键序列: 键盘上出现的每个键无需修饰符都会以按下键和按下键的形式发送。

不过,您可以使用一段 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用硒按住非修饰键(空格键)? 的相关文章

随机推荐

  • 如何为将 Gmail 作为默认邮件处理程序的用户在新选项卡中打开 mailto 链接?

    在网页上 mailto 链接会打开默认的电子邮件客户端 现在 Chrome 提供了将 Gmail 设置为默认电子邮件客户端的功能 一些用户在同一窗口中打开了链接 从而使他们离开了单击链接的页面 他们不喜欢这样 我尝试将目标 blank添加到
  • 列表视图中每一行的背景

    我正在尝试定制一个ListView为每一行设置默认背景图像和突出显示的背景图像 但是 突出显示的背景图像影响单行 而默认背景图像影响整行ListView 但我需要它影响每一行 有人可以告诉我该怎么做吗 这是我的代码 布局 main xml
  • matplotlib imshow():如何制作动画?

    我发现了这个精彩的动画简短教程 http jakevdp github io blog 2012 08 18 matplotlib animation tutorial http jakevdp github io blog 2012 08
  • 将 MySQL 架构作为 CoreData 数据模型导入 Xcode

    我有一个现有的 MySQL 数据库 我想将架构导入 Xcode 并创建一个核心数据 http developer apple com macosx coredata html数据模型 有没有办法 工具 流程 来导入CREATE声明 这样我就
  • C++11 是否允许向量

    容器要求已从 C 03 更改为 C 11 虽然 C 03 具有全面的要求 例如向量的复制构造性和可分配性 但 C 11 定义了每个容器操作的细粒度要求 第 23 2 节 因此 您可以例如 只要您只执行某些不需要赋值的操作 构造和push b
  • 如何删除没有本地跟踪分支的远程分支?

    如何在没有本地跟踪分支的情况下删除所有远程分支 我有大约 30 个没有本地分支 已删除 的远程分支和 20 个跟踪到远程的本地分支 我找到了几篇关于如何做相反的事情的帖子 编辑 寻找一个单行来解决这个问题 这样我就不必手动一一删除这些分支
  • 404 Page Not Found 您请求的页面未找到。代码点火器[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在 co
  • 从投影仪闪光灯执行外部 exe

    我们有一个从 AS3 编译的投影仪应用程序 exe 我们如何从投影仪启动另一个 外部 可执行文件 这是代码 它没有做任何可见的事情 Play ACQ Demo Acq addEventListener MouseEvent CLICK cl
  • JavaFX 媒体播放器不播放视频

    Using OpenJFX 11我正在使用媒体播放器在 Linux 系统上播放一些剪辑 其中一些显示 另一些则不显示 据我所知 编码的唯一区别是 未播放的视频包含音轨 这是的输出mediainfo对于播放的视频 General Comple
  • 通过 boost graph 将向量变量导出到图形

    我想导出一个存储字符串值序列的向量来增强图 点文件 最后四行可以解释问题 所需的帮助 我知道代码是错误的 但需要指导来解决这个问题 我想将向量 toponodedist2 存储到图形点文件 这里我想存储一个数组 向量 它将存储索引处的值序列
  • Angular 9 HttpErrorResponse 'JSON.Parse 错误',而响应正常

    为什么这会引发错误 deleteUser userId string this dataService deleteUser userId subscribe response string gt console log response
  • 如何在 Rust 中对向量的元素运行 for 循环并更改 for 循环内部和 for 循环外部的向量?

    我是新来的Rust 我需要在 for 循环之前创建一个向量 在其上运行 for 循环 更改 for 循环内的向量 然后在 for 循环之后更改向量 我尝试了以下代码并尝试使用不可变借用 但两者都不起作用 fn main let mut ve
  • Xcode 4.3 的 pngcrush 在哪里?

    有一个苹果定制版本pngcrush在 4 3 之前的每个 Xcode 版本中 我在 Xcode 4 3 中找不到它 它仍然可以作为独立的吗exe file 另一个相关问题 文件来自哪里Command Line Tools for Xcode
  • 没有访问修饰符的方法

    好吧 这让我很烦恼 我知道我在某处读过它 但谷歌没有帮助 未指定访问修饰符的方法的可访问性级别是多少 void Foo code 我想说internal但我不是100 确定 默认可访问性type is internal 但该类型的默认可访问
  • 如何在 Promela - SPIN 中将 LTL 转换为 Automato?

    如何将 LTL 转换为 PROMELA 中的自动机 我知道使用命令 SPIN f ltl x 可以将 LTL 转换为 never 声明 但我想要 LTL 的自动机而不是否定的自动机 如果我之前否定 LTL 以生成 never 声明 则这是正
  • 为什么int array[1000][1000]是C程序中的内存问题? [复制]

    这个问题在这里已经有答案了 Why int array 1000 1000 C 程序中声明时存在内存问题main方法而不是全局声明 堆栈的大小有限 因此只能保存有限数量的信息 如果程序试图在堆栈上放入太多信息 堆栈溢出将导致 当堆栈中的所有
  • 如何在reactjs中只允许文本框中出现数字?

    如何仅使用正则表达式在reactjs中仅允许文本框中的数字 基本思想是 Use 受控组件 https reactjs org docs forms html controlled components 使用输入字段的 value 和 onC
  • Angular 的 NO_ERRORS_SCHEMA 有问题吗?

    当测试具有子组件的组件时 您有几个选项 导入设置组件和子组件的模块 问题是您实例化真正的子组件及其依赖项 模拟子组件 这可能很乏味 具体取决于它有多少子组件 Use NO ERRORS SCHEMA并忽略子组件 鉴于大多数时候您只关心当前组
  • PHP 简单 HTML DOM 解析器添加脚本标签

    是否可以使用 PHP Simple HTML DOM 解析器在 simple html dom 对象的头部添加一个新的脚本标记 该对象具有主页的完整 html 我需要在该模板中添加一些节点 其中一个节点是带有 jquery 的脚本标记 另一
  • 如何使用硒按住非修饰键(空格键)?

    我遇到了一个问题 硒无法按住不在此列表中的键 Keys SHIFT Keys CONTROL Keys ALT Keys META Keys COMMAND Keys LEFT ALT Keys LEFT CONTROL Keys LEFT