我有一个非常简单的测试
@Test
void dragAndDrop()
{
driver.get("https://www.testandquiz.com/selenium/testing.html");
driver.manage().window().maximize();
WebElement source = driver.findElement(By.id("sourceImage"));
WebElement target = driver.findElement(By.id("targetDiv"));
builder.dragAndDrop(source, target).perform();
}
测试毫无例外地通过了。但是,它不执行拖放操作。我试过Chrome、Firefox和Edge。谢谢你的帮助。
想要dragandrop()
的WebElement的HTML包含属性draggable=true
Draggable是一个属性,它指示是否可以拖动元素,无论是使用本机浏览器行为还是超文本标记语言Drag and Drop API。draggable
可以具有以下值:
true
:可以拖动元素。false
:无法拖动元素。如果未设置此属性,其默认值为auto
,这意味着拖动行为是默认的浏览器行为:只能拖动文本选择、图像和链接。对于其他元素,必须将事件ondragstart设置为拖放才能工作。
Eric Bidelman在文章Native HTML5 Drag and Drop中提到,使对象可拖动很简单,因为只需在要使其可移动的元素上设置draggable=true
属性。例如:
<div id="cols">
<div class="col" draggable="true"><header>X</header></div>
<div class="col" draggable="true"><header>Y</header></div>
<div class="col" draggable="true"><header>Z</header></div>
</div>
要使其他类型的内容可以拖动,可以利用HTML5 DnD API。然而,使用CSS3,你可以把标记修饰得像列一样,添加光标会给用户一个视觉指示器,表明某些东西是可移动的,但大多数浏览器会创建一个被拖动内容的鬼影,而可拖动的内容不会做任何事。某些浏览器,尤其是FF,需要在拖动操作中发送一些数据。
此外,雷米·夏普在《拖动任何东西》一文中提到:
HTML5规范说,它应该非常简单,只需将以下属性添加到相关元素的标记中:
draggable="true"
然而,这并不完全适用于Safari或Firefox。对于Safari,您需要向元素添加以下样式:
[draggable=true] {
-khtml-user-drag: element;
}
这将在Safari中开始工作,当您拖动它时,它将使用dataTransfer对象设置一个默认的空值。但是,Firefox不允许你拖动元素,除非你手动设置了一些数据。
Selenium在与HTML5交互时存在拖放问题,我曾尝试在HTML5页面上使用以下Actions类方法,但它们似乎从来都不起作用
dragAndDrop() | clickAndHold() | moveToElement() | release()
另一方面,您可以使用JS脚本
String filePath = "C:\\Users\\Wilfred\\Desktop\\drag_and_drop_helper.js";
StringBuffer buffer = new StringBuffer();
String line;
BufferedReader br = new BufferedReader(new FileReader(filePath));
while ((line = br.readLine()) != null)
buffer.append(line);
String javaScript = buffer.toString();
javaScript = javaScript + "$('#sourceImage').simulateDragDrop({ dropTarget: '#targetDiv'});";
((JavascriptExecutor) driver).executeScript(javaScript);
同样的方法在这个链接上不起作用,我们不得不求助于robot类,我不建议这样做。你可以在这里找到更多信息
我使用了下面的代码进行拖放。它在Firefox驱动程序中工作,但在chrome驱动程序中不起作用。 请帮忙!
我试图使用Selenium WebDriver将一个元素拖到另一个元素中,但它不起作用。我尝试了在互联网上找到的所有解决方案,但似乎没有一个对我有效。 代码1:- 代码2:- 代码3:- 代码4:- 以上代码都不适用于我。以上所有操作都会正常运行,但应用程序中不会发生拖放操作。有没有其他解决办法?谢谢
在最新版本的chrome 91上,使用Selenium Action类或java脚本拖放元素不起作用。我尝试了所有可能的情况,例如使用以下方法 Javascript方法进行拖放 Java脚本方法1 Java脚本方法2: 使用jQuery方法。JQuery 使用机器人类。 使用Selenium Touch动作。 但没有一个解决方案对我有效。拖放是在之前的chrome版本89上进行的。 在此输入图像描
我只是做了一个简单的应用程序,包括FlowPane和一些有按钮的VBoxs。 主类是这样的。 这个画廊.class是扩展FlowPane的主要后台类。 而PlotterPanel就是VBox,有按钮,可以在图库中拖拽。 问题是,当我在图库中拖动绘图器面板时,它第一次就不能被拖动。我在第二次尝试后工作。当我开始拖动时,它显示了拖动框,但是当我尝试放在另一个节点上时,鼠标点显示x符号。但是当目标已经尝
在java上使用selenium webdriver进行拖放 src:- 目标:- 我使用以下代码进行拖放:- 我想把src元素拖到目标元素(作为li标记插入div标记的ol中)。如何在div(目标元素)的ol中插入第一个、最后一个或中间li标记。 我想创建一个li标记(比如目标元素中的li),然后将src元素拖到ol中新创建的li标记上(目标元素中存在)。 如何在selenium中创建li标记?
问题内容: 我无法使用Python WebDriver绑定进行拖放。我正在Mac OS X上使用Google Chrome和Firefox。这里有一个线程,那里有人遇到类似问题。 我尝试使用: 您是否设法使Python WebDriver拖放工作? 问题答案: 为了给出更新的答案,我已经验证了它现在确实可以在Mac上运行。 参考