【问题标题】:dragAndDrop using webdriverio使用 webdriverio 拖放
【发布时间】:2018-08-21 11:47:36
【问题描述】:

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

【问题讨论】:

  • 我很确定 moveTomoveToObject 已被弃用或将很快被弃用。他们希望您开始使用browser.actions()。我还没有一个可靠的例子,因为我不必使用新协议来实现它。如果今晚没有人回答这个问题,我会看看我是否可以一起举一个例子。如果您对 REPL 工作感到满意,我建议您阅读文档并在那里玩,看看您是否能弄清楚。你可以在这里找到更多信息webdriver.io/api/protocol/actions.html

标签: webdriver-io


【解决方案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,我强烈建议您学习。您可以在控制台中使用命令,直到您弄清楚一些事情,然后将这些命令添加到您的测试中。

另外,正如我在上面的 cmets 中所述。 dragAndDrop()moveToObject() 很快就会被弃用,当你使用它们时,你可能会看到很多关于它的警告。实现拖放操作的正确方法是使用browser.actions()。不幸的是,我没有一个如何做到这一点的例子,因为我还没有玩过它。如果今晚没有人提供一个例子,我会尽力为你准备一个。

【讨论】:

  • 感谢您的回复 :) 我使用“xpath”来识别元素——源和目标。您的示例可能会有所帮助,我还没有尝试过:) 另外,感谢您的建议,我将不得不检查 REPL!关于“行动”,我也尝试过,但它没有像我预期的那样工作。但同样,我不能 100% 确定我是否正确实施了操作!
  • 你好!我已经尝试按照您在示例中的建议进行操作,但它给出了一个错误,提示“选择器需要是 typeof string”。知道这里出了什么问题吗??
  • 另外,当我记录对象(例如 docIdHeader 和 pageCountHeader)时,我在 selenium 响应中得到以下内容:sessionId、Status 和 value 但没有“选择器”:/ 我不明白为什么会发生这种情况!!
  • 你能分享你用来获取元素的代码吗?除非找不到该元素,否则我不确定为什么会发生这种情况。如果发生这种情况,您应该会收到未找到元素的错误。
【解决方案2】:

即使我遇到了这个问题,其中光标在 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2012-01-30
    • 2011-08-05
    • 2011-01-05
    • 2012-05-31
    相关资源
    最近更新 更多