Selenium moveByOffset没有做任何事情

时间:2014-03-28 02:35:35

标签: java selenium selenium-firefoxdriver

我在Linux Xubuntu 13.10上使用Firefox 28.0运行最新的selenium 2.41

我试图让FirefoxDriver将鼠标移到页面上(在我的测试中,我已经使用了有很多悬停激活菜单的有线网页),但是{{1根本没有对鼠标做任何明显的事情:

moveByOffset

我希望鼠标移动到不同的元素上并触发所有悬停动作,但什么也没发生

5 个答案:

答案 0 :(得分:2)

moveByOffset的方法Actions已经或已经被破坏。见Selenium WebDriver Bug 3578

(错误描述在这个bug文档中的某些行中。)

项目成员(barancev)声称应该使用Selenium 2.42版修复此错误。

尽管如此,我在使用Firefox 33.0在openSUSE 12.3上运行的2.44版本中发现了同样的错误。 moveToElement有效,moveToOffset没有。

答案 1 :(得分:1)

我一直在努力工作。

如果dragtarget不可见,似乎硒有问题,因此需要滚动。

无论如何,那是有效的(Java)代码。请注意,我打电话给#34; release()"没有参数 - 可拖动元素和可拖动元素作为参数都不适合我。以及" moveToElement(可丢弃)"对我没有用,这就是我手动计算偏移量的原因。

public void dragAndDrop(WebElement dragable, WebElement dropable,
        int dropableOffsetX, int dropableOffsetY) {
    Actions builder = new Actions(driver);

    int offsetX = dropable.getLocation().x + dropableOffsetX
            - dragable.getLocation().x;
    int offsetY = dropable.getLocation().y + dropableOffsetY
            - dragable.getLocation().y;

    builder.clickAndHold(dragable).moveByOffset(offsetX, offsetY).release()
            .perform();
}

答案 2 :(得分:0)

我也在努力解决这个问题,对我有用的解决方案是,我们必须在X或Y坐标上加1。

看起来(x,y)将我们带到了无法点击的元素的边缘

以下为我工作

    WebElement elm = drv.findElement(By.name(str));

    Point pt = elm.getLocation();

    int NumberX=pt.getX();
    int NumberY=pt.getY();

    Actions act= new Actions(drv);
    act.moveByOffset(NumberX+1, NumberY).click().build().perform();

您甚至可以尝试为也适用的y坐标添加+1

   act.moveByOffset(NumberX+1, NumberY).click().build().perform(); 

答案 3 :(得分:-1)

请尝试使用moveToElement。它应该工作。

Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("<XPATH HERE>"));
action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();

答案 4 :(得分:-1)

我建议,如果您的浏览器未执行movetoelement并移至offset,则您输入了错误的element偏移量 查找偏移量,您可以在Chrome中使用Cordinates插件