双击x y坐标WebdriverIO

时间:2018-06-10 22:29:28

标签: javascript double-click e2e-testing webdriver-io spectron

WebdriverIO提供doubleClick()命令。与其他命令不同,例如leftClick()doubleClick()没有任何x y参数。我无法双击某个特定组件上的特定x y位置。我想这样做是因为应该在精确的双击位置插入子元素。

我已使用moveToObject()首先将光标移动到特定位置,但doubleClick不会选择此位置。它总是双击组件的中心。

此外,没有像'elementIdDoubleClick`这样的命令。并且,行动尚未实施。

有没有人知道如何双击组件中的特定x y坐标?

2 个答案:

答案 0 :(得分:1)

您可以先使用self移至元素,然后再使用doDoubleClick();

validates :name, :presence => true, on::create

但请确保已弃用 moveToObject ()和 doDoubleClick ()。

WDIO在不发布替代API的情况下不会删除它们。

并确保您使用doDoubleClick(); 在您的应用启动配置中将这些警告静音。

答案 1 :(得分:1)

doDoubleClick()似乎不适用于我的Chrome,而且我不确定为什么。我看到ChomeDriver是implementing actions as I write this。完成后,您将可以执行以下操作:

browser.moveToObject(someElement, x, y);
browser.actions().mouseDown().mouseUp().mouseDown().mouseUp().perform();

但是现在,当我使用ChromeDriver 2.45进行操作时,我得到了:

Error: unimplemented command: session/c4dae3dead96649fc7c26f75709257da/actions

因此,如果您离遥远的未来不远,那么这对我来说是有用的:

function doubleClick(someElement, x, y) {
  let attempt = 0;
  let timeToDoubleClick;
  do {
    browser.moveToObject(someElement, x, y);
    let startTime = Date.now();
    browser.buttonPress(0).buttonPress(0);
    timeToDoubleClick = Date.now() - startTime;
    console.log("Time to double click: " + timeToDoubleClick);

    if (timeToDoubleClick > 500)  {
      console.log("Waiting 10 seconds to allow the CPU to breath / check to see if a tab has opened...");
      browser.pause(10000);

      // In my case I'm expecting a new tab to open
      if(browser.getTabIds().length > 1) {
        // The tab opened!
        timeToDoubleClick = 0;
      }
    }
  } while(timeToDoubleClick > 500 && attempt++ <= 5);

  if(attempt > 5) {
    throw new Error("Could not manage to double click!");
  }
}