WebDriver拾级而上(15) – 拖曳动作模拟

webdriversjes

如何把一个元素拖放到另一个元素里面

下面这个页面是一个演示拖放元素的页面,你可以把左右页面中的条目拖放到右边的div框中。

http://koyoz.com/demo/html/drag-drop/drag-drop.htm

<div id="drop">
    拖过来试试
    <p>11111拖入</p>
</div>
<div id="items">
    <div id="item1" class="item" style="position: absolute; left: 411px; top: 154px; display: none;">11111</div>
    <div id="item2" class="item">22222</div>
    <div id="item3" class="item">33333</div>
    <div id="item4" class="item">44444</div>
    <div id="item5" class="item">55555</div>
    <div id="item6" class="item">66666</div>
</div>

Java代码

package com.test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class Test_DragAndDrop {
	public static void main(String[] args) {
		WebDriver dr = new ChromeDriver();  
		dr.get("http://koyoz.com/demo/html/drag-drop/drag-drop.html");
		
		//首先new出要拖入的页面元素对象element和目标对象target,然后进行拖入。  
		WebElement element = dr.findElement(By.id("item1"));  
		WebElement target = dr.findElement(By.id("drop"));  
		(new Actions(dr)).dragAndDrop(element, target).perform();    
		
		//利用循环把其它item也拖入  
		String id="item" ;  
		for(int i=2;i<=6;i++){
			String item = id+i;  
			(new Actions(dr)).dragAndDrop(dr.findElement(By.id(item)), target).perform();  
		}
		//dr.quit();          
	}
}

=================================================

附:如何利用Actions类模拟鼠标和键盘的操作

actions类,主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作。对于这些操作,使用perform()方法进行执行。
actions类可以完成单一的操作,也可以完成几个操作的组合。

单一的操作

单一的操作是指鼠标和键盘的一个操作。如鼠标左键按下、弹起或输入一个字符串等。
前面涉及到鼠标键盘操作的一些方法,都可以使用actions类中的方法实现,比如:click,sendkeys。

WebElement  element = dr.findElement(By.id("test"));  
WebElement  element1 = dr.findElement(By.id("test1"));  
element.sendKeys("test");
element1.click;

用Actions类就可以这样实现:

//新建一个action
Actions action=new Actions(driver);
//操作
WebElement element=dr.findElement(By.id("test"));
WebElement element1=dr.findElement(By.id("su"));
action.sendKeys(element,"test").perform();
action.moveToElement(element1);
action.click().perform();

看起来用Actions类实现click和sendKeys有点烦索

组合操作

组合操作就是几个动作连在一起进行操作。如对一个元素的拖放。

(new Actions(dr)).dragAndDrop(dr.findElement(By.id(item)), target).perform();

可以直接调用dragAndDrip()方法,也可以像下面濱示的一样把几个操作放一起实现

Action dragAndDrop = builder.clickAndHold(someElement)
       .moveToElement(otherElement)
       .release(otherElement)
       .build().perform(); 

其他鼠标或键盘操作方法可以具体看一下API里面的org.openqa.selenium.interactions.Actions类

[转自网络(如知原出处,请留言告知)]

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据