使用 webdriverio 拖放

dragAndDrop using webdriverio

我已经尝试了使用 webdriverio 执行 dragAndDrop 的每一件事,但没有任何效果。我还在 webdriverio gitter 中发布了一个问题,但没有回复。下面发布的代码是我尝试过的方法之一,它应该可以工作,但事实并非如此!

`   await this.driver.moveToObject(source); 
    await sleep(2000);
    await this.driver.buttonDown(0);
    await sleep(2000);
    await this.driver.moveToObject(destination);    
    await sleep(2000);
    await this.driver.buttonUp(0);`

我不确定您正在使用的 sourcedestination objects 上有哪些属性,但这里有一个示例,说明我是如何让它工作的您正在尝试的相同命令。

在我的示例中,我有一个 table,其中的列可以 re-ordered 通过将它们拖放到我想要的任何位置。首先我得到两列 headers 我想切换

let docIdHeader = browser.element('div[colid="documentid1"]');
let pageCountHeader = browser.element('div[colid="_PAGE_COUNT1"]');

如果我将这些 objects 记录到控制台,我可以看到存储在其中的属性。

> docIdHeader
{ sessionId: 'e35ae3e81f1bcf95bbc09f120bfb36ae',
  value:
   { ELEMENT: '0.3568346822568915-1',
     'element-6066-11e4-a52e-4f735466cecf': '0.3568346822568915-1' },
  selector: 'div[colid="documentid1"]',
  _status: 0 }

> pageCountHeader
{ sessionId: 'e35ae3e81f1bcf95bbc09f120bfb36ae',
  value:
   { ELEMENT: '0.3568346822568915-2',
     'element-6066-11e4-a52e-4f735466cecf': '0.3568346822568915-2' },
  selector: 'div[colid="_PAGE_COUNT1"]',
  _status: 0 }

现在使用您正在使用的相同技术和选择器 属性 关闭这些 objects 我可以通过两种方式让它工作。

browser.dragAndDrop(docIdHeader.selector, pageCountHeader.selector);

browser.moveToObject(docIdHeader.selector)
browser.buttonDown(0)
browser.moveToObject(pageCountHeader.selector)
browser.buttonUp(0)

我在 REPL 界面中 运行 这个所以我知道它是有效的,因为我可以看到在我发送命令后正在执行的每个步骤。如果您不熟悉如何使用 REPL,我强烈建议您学习。您可以在控制台中尝试使用命令,直到您弄清楚一些问题,然后将这些命令添加到您的测试中。

此外,正如我在上面的评论中所述。 dragAndDrop()moveToObject() 将很快被弃用,您在使用它们时可能会看到很多关于它的警告。继续执行拖放操作的正确方法是使用 browser.actions()。不幸的是,由于我还没有玩过它,所以我没有如何这样做的例子。如果今晚之前没有人提供示例,我会尽力为您准备一个。

即使我遇到了这个问题,其中光标在 buttonDown 之后并没有移动到目标对象并且使用 moveToObject 两次对我有用。

    await this.driver.moveToObject(source); 
    await this.driver.buttonDown(0);
    await this.driver.moveToObject(destination);    
    await this.driver.moveToObject(destination);   
    await this.driver.buttonUp(0);