Protractor 5.2.0:如何将特定按键(如TAB)作为参数传入sendKeys()?
实现Protractor通用按键操作函数的解决方案
好的,我来帮你搞定这个问题!你想要的通用按键函数核心是解决通过变量动态访问protractor.Key属性的问题,直接用点语法protractor.Key.(keys)是JS语法不允许的,我们换用方括号属性访问就能实现需求。
基础版本实现
下面是修改后的可直接使用的函数,还加了输入校验避免无效按键导致的错误:
function Keyboardaction(keys) { // 先校验传入的按键名称是否在protractor.Key中存在 if (!protractor.Key[keys]) { console.error(`无效的按键名称: ${keys},请查看protractor.Key的合法选项`); return Promise.reject(new Error(`无效的按键名称: ${keys}`)); } return browser.actions().sendKeys(protractor.Key[keys]).perform(); }
为什么这么改?
protractor.Key本质是一个包含所有按键常量的对象,比如protractor.Key.TAB、protractor.Key.ENTER都是它的属性。当你想用变量(比如keys参数)来访问属性时,必须使用方括号语法obj[variable],而点语法obj.variable只能用于固定的属性名,没法动态传递变量。
调用示例
现在你可以直接传入按键名称的字符串来调用:
// 触发TAB按键 Keyboardaction('TAB'); // 触发ENTER按键 Keyboardaction('ENTER'); // 触发BACK_SPACE按键 Keyboardaction('BACK_SPACE');
扩展版本:支持组合按键
如果需要支持像Ctrl+C这类组合按键,可以稍微扩展函数,让它同时支持单个按键字符串和按键数组:
function Keyboardaction(keys) { let keySequence; // 处理组合按键的情况 if (Array.isArray(keys)) { keySequence = keys.map(key => { if (!protractor.Key[key]) { throw new Error(`无效的按键名称: ${key}`); } return protractor.Key[key]; }); } else { // 处理单个按键的情况 if (!protractor.Key[keys]) { throw new Error(`无效的按键名称: ${keys}`); } keySequence = protractor.Key[keys]; } return browser.actions().sendKeys(keySequence).perform(); }
组合按键调用示例
// 触发Ctrl+A全选 Keyboardaction(['CONTROL', 'A']); // 触发Shift+Tab反向切换 Keyboardaction(['SHIFT', 'TAB']);
内容的提问来源于stack exchange,提问作者Aarthi
相关产品推荐
相关产品推荐

