当前位置: 首页 > 知识库问答 >
问题:

WebDriver拖放在页面上不起作用

公良渝
2023-03-14

我有一个非常简单的测试

 @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。谢谢你的帮助。

共有2个答案

商夜洛
2023-03-14

想要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不允许你拖动元素,除非你手动设置了一些数据。

李建中
2023-03-14

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上运行。 参考