拖拽掉落在Nightwatch + Selenium中不起作用

时间:2017-03-31 19:19:23

标签: javascript selenium knockout.js drag-and-drop nightwatch.js

使用夜视仪和硒,在系统测试期间,我正在尝试拖放,这是使用Knockout-draggable完成的。手动使用时,它可以100%工作。这是系统测试的代码,它应该拖放一个可拖动的框:

this.moveToElement('@box', 0, 0);
c.mouseButtonDown(0);
this.moveToElement('@box2', 0, 40);
c.mouseButtonUp(0);

this是页面(xpath元素所在的页面),c是客户端。

但是这似乎甚至无法在第二个盒子(大约40像素高)下移动盒子。是的,我尝试了不同的数字,甚至没有把盒子拖到任何地方。在Firefox中完成。

是的,@box@box2都在使用xpath。我一直在使用它们进行一系列其他测试。

4 个答案:

答案 0 :(得分:1)

如何在c.mouseButtonDown(0);和之间暂停一下 this.moveToElement('@box2', 0, 40);

答案 1 :(得分:1)

我采用了@Hikaryu的方法,对我有用:

exports.dragAndDrop = function (browser, LocatorFrom, LocatorTo) {
  browser
    .moveToElement(LocatorFrom,  10,  10)
    .mouseButtonDown(0)
    .pause(2000)
    .moveToElement(LocatorTo,  10,  10)
    .pause(2000)
    .mouseButtonUp(0);
  return browser;
};

答案 2 :(得分:0)

我为这个问题做了一个customCommand。它没有问题地工作

module.exports.command = function (LocatorFrom, LocatorTo, callback) {

  var self = this;

  this
    .getLocation(LocatorTo, function (result) {
      let xto = result.value.x;
      let yto = result.value.y;

      this.moveToElement(LocatorFrom,  10,  10)
        .mouseButtonDown(0)
        .pause(2000)
        .moveToElement(LocatorTo,  xto,  yto)
        .pause(2000)
        .mouseButtonUp(0);
      return this;
    });



  return this;
};

答案 3 :(得分:0)

你必须尝试这个,它在Chrome,Firefox和IE中运行良好。但这仅适用于要移动的元素和要移动的元素都支持HTML5拖放功能。

只需要安装" html-dnd"使用npm,以及这是一个链接 -
https://www.npmjs.com/package/html-dnd

安装完成后,您只需执行此命令:
browser.execute(dragAndDrop, ['#draggable', '#droppable']);

例如:
browser.execute(dragAndDrop,['#elemendId1', '#elemendId2']).pause(2000);

希望这适用于您的测试用例。