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

在java上使用selenium webdriver进行拖放

葛晔
2023-03-14

在java上使用selenium webdriver进行拖放

src:-

<div class="dd"><img alt="World" src="test.png" style="margin-top: -5px;width:auto;height:16px;padding-right:5px;"><span>sample</span></div>

目标:-

<div id="hierarchy">
<div class="dd" id="tree_nodes">
<ol class="dd-list" id="ancestor">

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" ><a  name="tree" style="margin:5px;">first page</a></div></li>

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" s><a  name="tree" style="margin:5px;">second page</a></div></li>

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" ><a  name="tree" style="margin:5px;">third page</a></div></li>

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" s><a  name="tree" style="margin:5px;">fourth page</a></div></li>

</ol>
</div>


</div>

我使用以下代码进行拖放:-

Actions builder = new Actions(driver);

Action dragAndDrop = builder.clickAndHold(src).moveToElement(trgt).release(trgt).build();

dragAndDrop.perform();

我想把src元素拖到目标元素(作为li标记插入div标记的ol中)。如何在div(目标元素)的ol中插入第一个、最后一个或中间li标记。

我想创建一个li标记(比如目标元素中的li),然后将src元素拖到ol中新创建的li标记上(目标元素中存在)。

如何在selenium中创建li标记?

共有3个答案

富辰阳
2023-03-14

Web驱动程序是为浏览器自动化而设计的,而不是为了更改服务器端代码或服务器返回的超文本标记语言。但是,如果你想在客户端临时更改超文本标记语言,你必须像其他人一样在浏览器上运行一些JavaScript。

您可以通过将WebDriver实例转换为JavascriptExecutor来执行JavaScript:

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");

然后,您可以使用JavaScript操作WebDriver实例当前正在驱动的浏览器上显示的页面内的DOM。

我参考了下面的链接:如何在java上使用selenium webDriver动态创建li标签

姚星河
2023-03-14

不能使用Selenium创建元素。Selenium用于测试web应用程序,而不是修改源代码。

虽然作为例外,您可以使用javascript来修改源。

从烈
2023-03-14

它对我有用...

public static void DragAndDropJS(WebElement source, WebElement destination, WebDriver driver) throws Exception 
{
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("function createEvent(typeOfEvent) {\n" +"var event =document.createEvent(\"CustomEvent\");\n" +"event.initCustomEvent(typeOfEvent,true, true, null);\n" +"event.dataTransfer = {\n" +"data: {},\n" +"setData: function (key, value) {\n" +"this.data[key] = value;\n" +"},\n" +"getData: function (key) {\n" +"return this.data[key];\n" +"}\n" +"};\n" +"return event;\n" +"}\n" +"\n" +"function dispatchEvent(element, event,transferData) {\n" +"if (transferData !== undefined) {\n" +"event.dataTransfer = transferData;\n" +"}\n" +"if (element.dispatchEvent) {\n" + "element.dispatchEvent(event);\n" +"} else if (element.fireEvent) {\n" +"element.fireEvent(\"on\" + event.type, event);\n" +"}\n" +"}\n" +"\n" +"function simulateHTML5DragAndDrop(element, destination) {\n" +"var dragStartEvent =createEvent('dragstart');\n" +"dispatchEvent(element, dragStartEvent);\n" +"var dropEvent = createEvent('drop');\n" +"dispatchEvent(destination, dropEvent,dragStartEvent.dataTransfer);\n" +"var dragEndEvent = createEvent('dragend');\n" +"dispatchEvent(element, dragEndEvent,dropEvent.dataTransfer);\n" +"}\n" +"\n" +"var source = arguments[0];\n" +"var destination = arguments[1];\n" +"simulateHTML5DragAndDrop(source,destination);",source, destination);
    Thread.sleep(1500);

}

我面临着拖拽硒行动的问题。以上代码就是我的解决方案。

 类似资料:
  • 有没有任何一个测试REST API的使用硒网络驱动程序Maven TestNG。请分享信息或样本项目

  • 我正在尝试播放以下网站的视频(使用JUnit)-Day01。http://www.itelearn.com/live-training/security-testing-live-training我试图实现的是,在播放视频后,我将拍摄一张屏幕截图,以证明视频播放正确。点击Day01视频后,它会在一个新窗口中打开——当我查看代码时,我意识到他们使用了iFrame。我可以关闭此视频窗口,但无法播放/暂

  • 问题内容: 是否可以通过Selenium Webdriver与Ruby一起使用HTML5拖放来解决问题?我在Ruby 1.9.2中使用Selenium- Webdriver 2.20.0 这是重现此问题的简单测试: 问题答案: 这仍然是Selenium中的一个错误,因此上面提到的JavaScript解决方法是一个不错的选择。 我构建了一个示例HTML拖放页面,并编写了一个测试,使用Ryan提供的d

  • 我在Selenium 1(又名Selenium RC)中编写了以下代码,用于使用java滚动页面: Selenium 2(WebDriver)中的等效代码是什么?

  • 问题内容: 我在同一位置动态添加了多个视图,还添加了 平移手势每个视图。所有视图位于同一位置,因此可以 覆盖。我的问题是,当要拖动最后一个视图时,却 拖动了所有视图。如何拖动单个视图。 在这里您可以看到所有视图中的GIF。View1,View 2和View3。所有都在 拖动。我只希望视图3是可拖动的,其他人则在 拖动3 完成后拖动。 1.拖动3-第一个拖动。 2.拖动2-第二次拖动。 3.拖动1-

  • 问题内容: 我想使用VKCOM / noverify来分析代码。使用此命令从命令行(Windows dos shell)调用它 问题是我无法将参数传递给 我尝试了什么 您可以在此摘要中找到我的源代码。尽管分隔符在上方为空,但似乎args是以字符串分隔的形式加入的。 问题 如何将多个参数传递给 为什么我的尝试在Windows上不起作用? 问题答案: 有多个选项可以将参数传递给exec.Command