使用webdriverio的dragAndDrop

时间:2018-03-13 09:27:00

标签: webdriver-io

我已经尝试过使用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);`

2 个答案:

答案 0 :(得分:1)

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

在我的示例中,我有一个包含列的表,可以通过将它们拖放到我想要的位置来重新排序。首先,我得到了我要切换的两个列标题

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

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

> 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 }

现在使用您正在使用的相同技术以及这些对象的选择器属性,我可以通过两种方式使其工作。

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()。不幸的是,我还没有一个如何做到这一点的例子,因为我还没有玩过它。如果没有人在今晚提供一个例子,我会尽力为你准备一个。

答案 1 :(得分:0)

即使我遇到过这样的问题,在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);