Drag and drop 量角器按元素的偏移位置拖放

Drag and drop 量角器按元素的偏移位置拖放,drag-and-drop,location,action,protractor,Drag And Drop,Location,Action,Protractor,问题: 有没有方法可以偏移要拖动的起始位置 我想编辑开始拖动过程的位置。在另一个元素上进行测试,无需调整即可获取以下代码: var controlPoint = $$('circle.points').first(); browser.actions(). dragAndDrop(controlPoint.getLocation(), {x: 500, y: 50}). perform(); 但是,当我尝试将其设置为修改位置时,如下所示: var control

问题: 有没有方法可以偏移要拖动的起始位置

我想编辑开始拖动过程的位置。在另一个元素上进行测试,无需调整即可获取以下代码:

var controlPoint = $$('circle.points').first();
browser.actions().
        dragAndDrop(controlPoint.getLocation(), {x: 500, y: 50}).
        perform();
但是,当我尝试将其设置为修改位置时,如下所示:

var controlPoint = $$('circle.points').first();
controlPoint.getLocation().then(function (loc) { 
    // would modify loc.x and loc.y here if this didn't give an error
    browser.actions().
        dragAndDrop(loc, {x: 500, y: 50}).
        perform();
});
我得到以下错误:

Failures:

  1) Single Segments should test dragging and dropping of control points
   Message:
     UnknownError: unknown error: at least an element or offset should be set
  (Session info: chrome=36.0.1985.125)
  (Driver info: chromedriver=2.10.267517,platform=Mac OS X 10.9.4 x86_64)
   Stacktrace:
     UnknownError: unknown error: at least an element or offset should be set
  (Session info: chrome=36.0.1985.125)
  (Driver info: chromedriver=2.10.267517,platform=Mac OS X 10.9.4 x86_64)
==== async task ====
mouseMove
    at Array.forEach (native)
==== async task ====
ActionSequence.perform
    at /Users/willko/Desktop/e2e_sketching/specs/sketch2.js:25:6
==== async task ====
问题在于DragandDropoc中,因为dragAndDrop将ElementFinder或WebElement作为第一个参数,并且您正在传递loc,这是一个具有x和y属性的对象

试试这个:

browser.actions().
    dragAndDrop(controlPoint, {x: 500, y: 50}).
    perform();

是否可以将第二个参数或偏移参数化为dragAndDrop?拖放可以处理硬编码的偏移对象,如这里描述的{x:500,y:50},但至少对我来说,{x:x,y:y}在ActionSequence.mouseMove函数中是未定义的

我想我也遇到了类似的问题。您可以尝试将传入的参数四舍五入。不过,只要该函数得到整数,它就应该工作。var dragWithOffset=functionstartElement,x_offset,y_offset{return browser.actions.dragandropstartelement.getWebElement,{x:x_offset,y:y_offset}.perform;};没有真正回答问题,但我将标记为已接受,因为它指出了错误的原因。您可以通过mouseMove方法编辑开始位置,如我的另一个问题所示。不过,这是一个更加手工的过程。布雷迪在那一页上的评论也很有帮助。