用HTML5实现Selenium Java拖拽功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用HTML5实现Selenium Java拖拽功能相关的知识,希望对你有一定的参考价值。

在这里的几个帖子中,有一个针对使用 html5 拖放的页面的 selenium 拖放的变通方法。 这个变通方法涉及使用 javascript 模拟拖放,例如 无法在Selenium WebDriver测试中使用javascript执行HTML5拖放。https:/gist.github.comrcorreia2362544。. 这个解决方案在这个页面上很好用。http:/the-internet.herokuapp.comdrag_and_drop。.

一般的方法是阅读这里的javascript文件(https:/gist.github.comrcorreia2362544#file-drag_and_drop_helper-js。)变成一个字符串,下面称为'jsfile'。

然后在Selenium中(使用java),传递源和目标的css选择器,其中#column-a是源的id,#column-b是目标。

 ((JavascriptExecutor) driver).executeScript(jsfile +"$('#column-a').simulateDragDrop({ dropTarget: '#column-b'});");

在那个页面上,它的工作就像一个冠军。

然而,类似的方法在这个页面上似乎不起作用。https:/crossbrowsertesting.github.iodrag-and-drop.html。. 当我运行时,什么都没有发生

 ((JavascriptExecutor) driver).executeScript(jsfile +"$('#draggable').simulateDragDrop({ dropTarget: '#droppable'});");

我有一些页面的行为似乎与第二页类似(例如,没有拖放)。 作为理解这一点的第一步,我想知道为什么这种方法在后一种情况下似乎不起作用。

答案

关于重新测试 https:/crossbrowsertesting.github.iodrag-and-drop.html。看起来,直接使用 Actions 类就能实现拖放功能。 在我测试的特定应用程序中,我使用了一些额外的代码来帮助实现无障碍操作,通过将焦点设置在第一个元素上并按下回车键,然后将焦点设置在目标元素上并再次按下回车键,就可以实现拖放。我很确定这是自定义的事件处理,所以在其他应用程序中可能无法使用。 为了以防万一,我在这里发布了在selenium中这样做的代码。

 public void dndHtml5(String xPathSource, String xPathDestination) {
    clickEnterKeyOnElement(xPathSource);
    clickEnterKeyOnElement(xPathDestination);
}

public void clickEnterKeyOnElement(String xPath) {
    setFocusOnElement(xPath);
    WebElement target=element(xPath);
    target.sendKeys(Keys.ENTER);
}

public void setFocusOnElement(String xPath) {
    WebElement element = element(xPath);
    Actions actions = new Actions(driver);
    actions.moveToElement(element).build().perform();
}

public WebElement element(String xPath){
    return driver.findElementByXPath(xPath);
}

以上是关于用HTML5实现Selenium Java拖拽功能的主要内容,如果未能解决你的问题,请参考以下文章

Html5 的拖拽功能

Vue 也能实现拖拽了 (Draggable)

jsPlumb开发入门教程(实现html5拖拽连线)

html5 拖曳功能的实现[转]

为啥使用html5的拖拽功能,在火狐中总会弹出一个新面页?

HTML5自学笔记[ 10 ]简单的购物车拖拽