在Protractor中点击给定元素的坐标

12

我想要点击canvas元素的特定位置,因此我编写了以下Protractor代码:

var canvas = element(by.id("canvas"));

var clickCanvas = function(toRight, toBottom) { 
  browser.actions()
    .mouseMove(canvas, -toRight, -toBottom)
    .click();
}

toRight/toBottom 表示点击应该发生的像素数,相对于我的画布左上角。

然而,点击似乎并没有在给定的坐标处执行。我从软件质量保证和测试堆栈交流中的相关问题中获取了这个代码片段。

您能确认此代码片段是否有效吗?
您能提供替代方案吗?


你有查看过 browser.executeScript() 吗? - Aaron
1
你需要执行 .perform() 这个动作。 - Lee Goddard
3个回答

22

我通过将表示坐标的对象作为mouseMove的第二个参数来完成了这项工作:

var canvas = element(by.id("canvas"));

var clickCanvas = function (toRight, toBottom) { 
    browser.actions()
      .mouseMove(canvas, {x: toRight, y: toBottom})
      .click()
      .perform();
};

@Olov,作为安慰,我给你点了个赞;-)这只适用于画布元素还是任何元素都可以? - Besnik
@Besnik 嗯,它应该适用于任何ElementFinder(如果您以前没有听说过,请在Protractor API参考中查找),因此任何元素都应该正常工作。 - Olov

3

你错过了.perform()函数

browser.actions().mouseMove(canvas, -toRight, -toBottom).click().perform();

我在我的测试中多次使用它并确认它有效。


3
在这种情况下,您错过了perform()调用:
 browser.actions()
  .mouseMove(canvas, -toRight, -toBottom)
  .click();  // < no .perform() HERE

这是在Protractor/WebDriverJS编写e2e测试时常见的错误之一。
为了防止这些错误发生,有一个eslint-plugin-protractor插件用于ESLint,如果browser.actions()链上没有调用perform(),它会警告你

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接