selenium webdriver(4)---模拟鼠标键盘操作

webdriver提供Actions来模拟鼠标悬浮、拖拽和键盘输入等操作,详细代码见org.openqa.selenium.interactions.Actions.本文通过几个实例来说明Actions的相关操作

 输入数据

需求:登录安居客网站,在二手房板块输入"@@@",点击搜索,正确跳转成功反之失败,大部分情况下我们这样写

 1 //搜索二手房
 2 
 3 import org.openqa.selenium.By;
 4 import org.openqa.selenium.WebDriver;
 5 import org.openqa.selenium.chrome.ChromeDriver;
 6 import org.openqa.selenium.WebElement;
 7 
 8 public class NewTest{
 9     public static void main(String[] args) throws InterruptedException {
10  
11        System.setProperty ( "webdriver.chrome.driver" , 
12        "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
13        WebDriver driver = new ChromeDriver();
14        driver.get("http://shanghai.anjuke.com");
15        try{
16            
17           WebElement input=driver.findElement(By.xpath("//input[@id='glb_search0']"));
18           WebElement search=driver.findElement(By.xpath("//input[@id='btnSubmit']"));
19           input.sendKeys("@@@");
20           search.click();
21           if(driver.getTitle().contains("@"))
22               System.out.println("搜索成功,跳转到"+driver.getTitle()+"页面");
23           else
24               System.out.println("搜索失败,跳转到了"+driver.getTitle()+"页面");
25            
26        }catch(Exception e){
27            e.printStackTrace();
28        }finally{
29            Thread.sleep(3000);
30            driver.quit(); 
31        }
32 }

 

使用Actions类还可以这样写

 1 import java.util.List;
 2 import java.util.Set;
 3 
 4 import org.openqa.selenium.By;
 5 import org.openqa.selenium.Keys;
 6 import org.openqa.selenium.WebDriver;
 7 import org.openqa.selenium.chrome.ChromeDriver;
 8 import org.openqa.selenium.interactions.Actions;
 9 import org.openqa.selenium.WebElement;
10 
11 public class NewTest{
12     public static void main(String[] args) throws InterruptedException {
13  
14        System.setProperty ( "webdriver.chrome.driver" , 
15        "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
16        WebDriver driver = new ChromeDriver();
17        driver.get("http://shanghai.anjuke.com");
18        try{
19            
20           WebElement input=driver.findElement(By.xpath("//input[@id='glb_search0']"));
21           WebElement search=driver.findElement(By.xpath("//input[@id='btnSubmit']"));
22           
23           //生成Actions实例对象
24           Actions actions=new Actions(driver);
25           //输入@@@点击搜索
26           actions.keyDown(input, Keys.SHIFT).sendKeys("222")
27           .keyUp(Keys.SHIFT).click(search).perform();
28           
29           if(driver.getTitle().contains("@"))
30               System.out.println("搜索成功,跳转到"+driver.getTitle()+"页面");
31           else
32               System.out.println("搜索失败,跳转到了"+driver.getTitle()+"页面");
33            
34        }catch(Exception e){
35            e.printStackTrace();
36        }finally{
37            Thread.sleep(3000);
38            driver.quit(); 
39        }
40 }

 

keyDown表示按下键盘,keyUp表示松开键盘。上述代码中先是执行keyDown,这时shift键按下后面的sendKeys内容也是在shift键按下的情况输入的,所以实际输入的是@@@.

 鼠标悬浮

需求:登录安居客首页,切换城市到杭州

 1 import org.openqa.selenium.By;
 2 import org.openqa.selenium.Keys;
 3 import org.openqa.selenium.WebDriver;
 4 import org.openqa.selenium.chrome.ChromeDriver;
 5 import org.openqa.selenium.interactions.Actions;
 6 import org.openqa.selenium.WebElement;
 7 
 8 public class NewTest{
 9     public static void main(String[] args) throws InterruptedException {
10  
11        System.setProperty ( "webdriver.chrome.driver" , 
12        "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
13        WebDriver driver = new ChromeDriver();
14        driver.get("http://shanghai.anjuke.com");
15        try{
16            
17           WebElement city=driver.findElement(By.xpath("//a[@id='switch_apf_id_8']"));
18           WebElement citys=driver.findElement(By.xpath("//div[@id='city-panel']"));
19           WebElement cityOption=driver.findElement(By.xpath("//a[@title='杭州房产网']"));
20           //生成Actions实例对象
21           Actions actions=new Actions(driver);
22           
23           //鼠标悬浮到城市标签
24           actions.moveToElement(city).perform();
25           
26           if(citys.isDisplayed())
27               System.out.println("鼠标悬浮成功,城市模块的display:"+
28                       citys.getCssValue("display"));
29           else
30               System.out.println("鼠标悬浮失败,城市模块的display:"+
31                       citys.getCssValue("display"));
32           //点击杭州
33           actions.click(cityOption).perform();
34           
35           if(driver.getTitle().contains("杭州"))
36               System.out.println("切换成功,跳转到"+driver.getTitle()+"页面");
37           else
38               System.out.println("切换失败,跳转到了"+driver.getTitle()+"页面");
39            
40        }catch(Exception e){
41            e.printStackTrace();
42        }finally{
43            Thread.sleep(3000);
44            driver.quit(); 
45        }
46 }

 

 多选框

由于安居客网站没有这方面的例子,下面就采用YUI类库的DEMO界面来演示

 1 import java.util.List;
 2 import java.util.Set;
 3 
 4 import org.openqa.selenium.By;
 5 import org.openqa.selenium.Keys;
 6 import org.openqa.selenium.WebDriver;
 7 import org.openqa.selenium.chrome.ChromeDriver;
 8 import org.openqa.selenium.interactions.Actions;
 9 import org.openqa.selenium.WebElement;
10 
11 public class NewTest{
12     public static void main(String[] args) throws InterruptedException {
13  
14        System.setProperty ( "webdriver.chrome.driver" , 
15        "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
16        WebDriver driver = new ChromeDriver();
17        driver.get("http://jqueryui.com/selectable/");
18        try{
19           WebElement frame=driver.findElement(By.xpath("//iframe[@class='demo-frame']"));
20           driver.switchTo().frame(frame);
21           List<WebElement> selects=driver
22                   .findElements(By.xpath("//li[@class='ui-widget-content ui-selectee']"));
23           //生成Actions实例对象
24           Actions actions=new Actions(driver);
25           actions.clickAndHold(selects.get(0)).clickAndHold(selects.get(1)).click().perform();
26            
27        }catch(Exception e){
28            e.printStackTrace();
29        }finally{
30            Thread.sleep(3000);
31            driver.quit(); 
32        }
33 }

 

clickAndHold是点击并维持着点击的状态,上面代码效果如下图

 拖拽框体

响应式网站和OA系统这方面的需求较多,下面演示如何将拖拽对象拖拽到右下角

 1 import org.openqa.selenium.By;
 2 import org.openqa.selenium.Keys;
 3 import org.openqa.selenium.WebDriver;
 4 import org.openqa.selenium.chrome.ChromeDriver;
 5 import org.openqa.selenium.interactions.Actions;
 6 import org.openqa.selenium.WebElement;
 7 
 8 public class NewTest{
 9     public static void main(String[] args) throws InterruptedException {
10  
11        System.setProperty ( "webdriver.chrome.driver" , 
12        "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
13        WebDriver driver = new ChromeDriver();
14        driver.get("http://jqueryui.com/draggable/");
15        try{
16           WebElement frame=driver.findElement(By.xpath("//iframe[@class='demo-frame']"));
17           driver.switchTo().frame(frame);
18           WebElement dragTable=driver.findElement(By.xpath("//div[@id='draggable']"));
19           //生成Actions实例对象
20           Actions actions=new Actions(driver);
21           //拖拽对象
22           actions.dragAndDropBy(dragTable, 270, 170).perform();
23            
24        }catch(Exception e){
25            e.printStackTrace();
26        }finally{
27            Thread.sleep(3000);
28            driver.quit(); 
29        }
30 }

 

其实dragAndDropBy方法就是clickAndHold和moveByOffset方法的组合而已

  actions.dragAndDropBy(dragTable, 270, 170).perform();
  actions.clickAndHold(dragTable).moveByOffset(270, 170).click().perform();

 

这两行代码功能是一样的,正所谓条条大路通罗马,我们只需选择最近、最安全的一条就好了。

 

转载于:https://www.cnblogs.com/michaelle/p/4023337.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值