3

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

我曾经moveToObject()先将光标移动到特定位置,但doubleClick没有选择它。它总是双击组件的中心。

也没有像“elementIdDoubleClick”这样的命令。而且,行动尚未实施。

有谁知道如何双击组件中的特定 xy 坐标?

4

2 回答 2

1

doDoubleClick()对我来说似乎不适用于 Chrome,我不知道为什么。在我写这篇文章时,我看到 ChomeDriver 正在执行操作。完成后,您将能够:

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!");
  }
}
于 2018-12-18T21:53:16.923 回答
1

您可以doDoubleClick();先移动到您的元素,然后使用 doDoubleClick();

return this.app.client.moveToObject(element,5,5).doDoubleClick();

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

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

并确保您webdriverOptions: ({deprecationWarnings : false}) 在应用程序启动配置中使用以使这些警告静音。

于 2018-07-06T03:53:18.967 回答