使用 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);`
我不确定您正在使用的 source
和 destination
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);
我已经尝试了使用 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);`
我不确定您正在使用的 source
和 destination
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);