使用Protractor控制鼠标移动

4
在一个特定的场景下,我需要完全控制我的鼠标,但是使用actions()类无法实现。
在我的应用程序中有一个地图和一个功能,它使用套索选择地图的某个部分(比如我们用套索画一个圆圈,选择区域用红色圆圈表示),然后才会弹出进一步导航的窗口。但是当我使用以下代码的actions()类时:
var loc = element(by.xpath("//span[@id='imgLasso']"));
browser.actions()
    .mouseMove(loc, {x: 550, y: 436}) 
    .mouseDown()
    .mouseMove({x: 700, y: 236})
    .perform();

实际鼠标移动不会发生,我找不到解决方法,除非使用Java机器人类(Java robot class),因此我想创建一个批处理文件,调用其中包含机器人方法的Java类,但我不确定该如何实现。

更新

it("working with lasso",function() {
    browser.sleep(5000);
    element(by.xpath("//span[@id='imgLasso']")).click();
    var plot0 = element(by.xpath("//span[@id='imgLasso']"));
    browser.sleep(2000); // intentional wait
    browser.actions()
        .mouseMove({x: 100, y: 100})
        .mouseDown()
        .mouseMove({x: 400, y: 0})
        .perform();

    browser.sleep(8000);
    element(by.xpath("//*[@id='imputTerritory']")).sendKeys("NewTeritory");
});

执行以上代码后,我有以下观察结果:
  1. var plot0行之前,代码正常执行。
  2. 之后,browser.action()...只有在Protractor关闭Chrome之前才会执行。不知道为什么。(我还包括了sleep来验证)
  3. 也就在Chrome关闭之前,我可以看到地图上的一条直线,但没有任何弹出窗口(可能是由于actions类未释放鼠标)。

补充一下,这次我没有在代码中传递任何plot0元素,我只是手动将鼠标指针放在地图上,然后执行上述规范。


1
你尝试过 browser.actions().dragAndDrop(...).perform() 吗? - alecxe
@ alecxe 我尝试了 browser.actions().dragAndDrop(plot0,{x: 400, y: 500}).perform(); 但没有帮助,但是当我像这样做时 browser.actions() .mouseMove(plot0, {x: 100, y: 100}) .mouseDown() .mouseMove({x: 400, y: 0}) .perform(); 这是我的观察结果:1.上述代码在 Protractor 关闭 Chrome 之前执行;2.上述代码可以工作,因为我可以看到一个红色的直线在 Chrome 关闭之前闪烁,但没有弹出窗口打开(应用程序在绘制线、圆或其他东西时的功能)。是否可能上述代码没有释放鼠标。 - eduliant
是的,在您的链中需要一个命令来释放鼠标按钮。 - martin770
1个回答

0

我认为你的链中缺少了mouseUp事件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接