knockout.js 在Nightwatch + Selenium中拖放不起作用

smdnsysy  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(147)

使用nightwatch和selenium,在一个系统测试中,我试着拖放,这是用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。我已经在一段时间内使用它们进行了一系列其他测试。

x6h2sr28

x6h2sr281#

c.mouseButtonDown(0);this.moveToElement('@box2', 0, 40);之间暂停一下怎么样

4ioopgfo

4ioopgfo2#

伙计们,你必须试试这个,它在Chrome,Firefox和IE中都能很好地工作。但只有当要移动的元素和要移动到的元素都支持HTML5拖放功能时,它才能工作。
你必须用npm安装“html-dnd”,这是一个链接-
https://www.npmjs.com/package/html-dnd
安装后,您只需执行以下命令:
browser.execute(dragAndDrop, ['#draggable', '#droppable']);
例如:
browser.execute(dragAndDrop,['#elemendId1', '#elemendId2']).pause(2000);
希望这对您的测试用例能很好地工作。

knpiaxh1

knpiaxh13#

我采用了@光的方法,它对我很有效:

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

fnatzsnv4#

我为此问题创建了一个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;
};

相关问题