Protractor右键点击正常,但无法选择上下文菜单选项求助
解决Protractor右键点击后选不上上下文菜单的问题
嘿,我来帮你搞定这个问题!先看你贴的错误信息,核心问题其实一眼就能看出来:你的XPath语法有个低级错误——你写的// [contains(text(),"Accept...")里,//后面多了个空格!这直接导致浏览器没法解析这个XPath表达式,肯定报错啊。
先把XPath改对,去掉那个多余的空格,比如写成:
//*[contains(text(), "Accept...")]
要是你知道菜单选项的具体标签(比如是div或者li),可以写得更精准,避免误匹配:
//div[contains(text(), "Accept...")]
不过就算XPath改对了,右键之后直接去点菜单选项也可能失败,因为上下文菜单是动态弹出来的,得等它完全渲染可见才行。这里推荐用Protractor自带的ExpectedConditions来等元素加载,别着急直接点击:
完整的可运行代码示例
const EC = protractor.ExpectedConditions; // 第一步:定位你要右键点击的目标元素 const targetElement = element(by.id('your-target-element-id')); // 第二步:执行右键点击操作 browser.actions().mouseMove(targetElement).perform(); browser.actions().click(protractor.Button.RIGHT).perform(); // 第三步:等菜单选项出现后再点击 const acceptOption = element(by.xpath('//div[contains(text(), "Accept...")]')); // 最多等5秒,要是还没出现就抛出提示 browser.wait(EC.visibilityOf(acceptOption), 5000, 'Accept选项没在5秒内显示出来'); acceptOption.click();
还有两个要注意的点:
- 如果你的上下文菜单是浏览器原生的右键菜单(不是网页自己写的DOM元素),那Protractor根本没法直接定位它——因为原生菜单不属于网页DOM范畴。这种情况就得用键盘模拟操作:右键之后按方向键选到目标选项,再按回车确认,比如:
// 假设Accept是第二个选项,按两次下方向键再回车 browser.actions().sendKeys(protractor.Key.ARROW_DOWN).perform(); browser.actions().sendKeys(protractor.Key.ARROW_DOWN).perform(); browser.actions().sendKeys(protractor.Key.ENTER).perform(); - 要是XPath还是匹配不到,可能是文本里有多余的空格或者换行,试试用
normalize-space()处理一下文本://*[contains(normalize-space(text()), "Accept...")]
内容的提问来源于stack exchange,提问作者sof4jey
相关产品推荐
相关产品推荐

