【问题标题】:Protractor : How to select an item from list when right-clicked量角器:右键单击时如何从列表中选择一个项目
【发布时间】:2017-10-17 19:45:53
【问题描述】:

我正在尝试右键单击一个元素,然后从列表中选择一个选项“重命名”。我已经“右键单击”工作,但无法从列表中选择选项。引用链接12

注1:

1:右键单击时可见的菜单选项是本机上下文菜单。因此,它们不会出现在我可以看到的 DOM 中。

2:App只能在Chrome浏览器中运行(不知道是不是浏览器问题)

我已经尝试了以下代码:

 browser.actions().mouseMove(elementVar).perform();
 browser.actions().click(protractor.Button.RIGHT).click(protractor.Button.ARROW_DOWN).click(protractor.Button.ARROW_DOWN).click(protractor.Button.ARROW_DOWN).perform();

考虑将“重命名”作为列表中的第三个选项。

注2: 如果我只是运行应用程序并从键盘输入“R”,它会选择“重命名”选项。但是当我试图在我的测试中运行它时,它没有选择“重命名”选项。请参阅我尝试过的以下代码:

browser.actions().mouseMove(elementVar).perform();
browser.actions().click(protractor.Button.ARROW_RIGHT).sendKeys('R',protractor.Key.ENTER).perform();

以上代码均无效。如果需要更多信息,请告诉我。

编辑:

我猜会发生以下情况:

一旦我将鼠标悬停,脚本“右键单击”,然后显示“工具提示”。由于“右键单击”后会显示“工具提示”,我认为菜单列表会进入背景(该列表仍然与工具提示一起可见),这就是向下箭头键不起作用的原因。这可能吗?如果是,如何等待工具提示不可见然后右键单击?

输入:我试图等待工具提示不可见然后右键单击,但“箭头向下”仍然不起作用。

有没有办法在我们右键单击后将菜单列表置于最前面?

重要提示

我右键点击元素后截图,截图没有显示“菜单列表”。下面是截图代码:

    browser.actions().click(protractor.Button.RIGHT).perform()
     .then(function() {
         browser.takeScreenshot().then(function(screenShot) {
            writeScreenShot(screenShot, "image.png");
});
});

//writeScreenShot takes two variables actual screenshot data and the file name. And the screenshot is saved as "image.png"

需要做什么?

【问题讨论】:

  • 您是否尝试先点击该元素?
  • 是的,我尝试先点击元素,但没有成功。
  • @alecxe:是的,另一个链接也由我发布,因为该线程已停用,还根据我的新研究添加了更多信息并完善了我的问题。此处发布的答案不适用于我的问题。让我知道如何才能关闭此问题,或者您希望我做其他任何事情。
  • @FindABug 我理解并且没有冒犯,但是因为这里没有活动所以发布重复的问题是不可接受的。请参阅stackoverflow.com/help/no-one-answers。谢谢!

标签: select protractor


【解决方案1】:

当您将ARROW 键发送到浏览器时,您必须将它们作为键发送,而不是将它们传递给click() 函数,并且ARROW_DOWN 键是Key 对象的一部分,而不是BUTTON。方法如下-

browser.actions().mouseMove(elementVar).perform();
browser.actions().click(protractor.Button.RIGHT).sendKeys(protractor.Key.ARROW_DOWN).sendKeys(protractor.Key.ARROW_DOWN).sendKeys(protractor.Key.ARROW_DOWN).perform();

对于您的第二次尝试,您应该发送RIGHT 代替protractor.Button.ARROW_RIGHT 进行右键单击。当您向sendKeys() 函数发送两个动作/键时,您必须使用chord 对象加入它们,该对象结合了一次按下两个键的动作(例如:CTRL+C 用于复制)。但在你的情况下,我认为它真的没有必要。以下是如何使用它-

browser.actions().mouseMove(elementVar).perform();
browser.actions().click(protractor.Button.RIGHT).sendKeys(protractor.Key.chord("r", protractor.Key.ENTER).perform(); //Not necessary as you wont be pressing R+ENTER in your keyboard

browser.actions().click(protractor.Button.RIGHT).sendKeys('R').sendKeys(protractor.Key.ENTER).perform();

希望这会有所帮助。

【讨论】:

  • 您好 Girish,谢谢,但我尝试了您的建议,但没有运气。以下是我尝试过但没有成功的方法:{browser.actions().click(protractor.Button.RIGHT).sendKeys('R').sendKeys(protractor.Key.ENTER).perform();} { browser.actions().click(protractor.Button.RIGHT).sendKeys(protractor.Key.ARROW_DOWN).sendKeys(protractor.Key.ARROW_DOWN).perform()};
【解决方案2】:

使用 XPath 解决您的问题

browser.actions().mouseMove(target).perform();
browser.actions().click(protractor.Button.RIGHT).perform();
element(by.xpath('//*[@id="context-menu"]/ul/li[1]')).click();

在你的情况下,它很可能是 "//*[@id="context-menu"]/ul/li[3]"。

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 2012-03-02
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多