基于Selenium2+Java的UI自动化(7)- 模拟键盘鼠标操作

摘要:
importorg.openqa.selenium.chrome.CromeDriver;Actionsaction=newActions(驱动程序);action.contextClick(inputBox).build().perform();driver.quit();packagecom.automation.actions;

webdriver提供Actions类,来模拟鼠标点击、悬浮、拖拽、键盘输入等操作;

一、鼠标双击、右击


selenium模拟鼠标单击是用WebElement.click(); 方法,但是双击、右击,需要使用Actions类来模拟;


package com.automation.actions;

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;

/**
 * 类说明:模拟鼠标双击、右击的操作
 * <br/>
 * @version 1.0
 * 2016年11月21日 下午8:41:14
 */
public class DoubleClickAndRightClick {
	private static WebDriver driver = null ;
	private static String chromeDriverDir = "D:\workspace\A_Test\resource\chromedriver.exe";
	
	public static void main(String[] args) {
		//1.打开浏览器;
		System.setProperty("webdriver.chrome.driver", chromeDriverDir);
		driver = new ChromeDriver();
		driver.manage().window().maximize();
		//打开文件网址;
		driver.get("http://www.baidu.com/");
		//定位百度输入框对象;
		WebElement inputBox = driver.findElement(By.id("kw"));
		/*
		 * 双击、右击输入框元素,
		 * 1.需要声明Actions类对象;
		 * 2.使用Actions对象的doubleClick、contextClick方法实现双击、右击操作;
		 */
		//声明Actions类对象;
		Actions action = new Actions(driver);
		//双击操作;
		action.doubleClick(inputBox).build().perform();
		//右击操作;
		action.contextClick(inputBox).build().perform();
		
		driver.quit();
	}
}

二、鼠标悬浮在指定元素上方


在有些页面上,需要鼠标停留在指定的元素上方,才能触发一些页面响应,例如隐藏元素、菜单等,这就需要模拟鼠标悬浮在元素之上;


package com.automation.actions;

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;

/**
 * 类说明:模拟鼠标悬浮在元素之上的操作
 * <br/>
 * @version 1.0
 * 2016年11月21日 下午8:52:50
 */
public class MoveToElement {
	private static WebDriver driver = null ;
	private static String chromeDriverDir = "D:\workspace\A_Test\resource\chromedriver.exe";
	
	public static void main(String[] args) {
		//1.打开浏览器;
		System.setProperty("webdriver.chrome.driver", chromeDriverDir);
		driver = new ChromeDriver();
		driver.manage().window().maximize();
		//打开文件网址;
		driver.get("http://www.baidu.com/");
		//定位百度搜索按钮对象;
		WebElement searchButton = driver.findElement(By.id("su"));
		/*
		 * 模拟鼠标停留在搜索按钮上方,
		 * 1.需要声明Actions类对象;
		 * 2.使用Actions对象的moveToElement方法实现鼠标悬浮操作;
		 */
		//声明Actions类对象;
		Actions action = new Actions(driver);
		
		//模拟鼠标悬浮在按钮上
		action.moveToElement(searchButton).perform();
		
		driver.quit();
	}
}

三、模拟鼠标托转


可以模拟有些网页的元素,能够被移动到其他位置;


package com.automation.actions;

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;

/**
 * 类说明:模拟鼠标悬浮在元素之上的操作
 * <br/>
 * @version 1.0
 * 2016年11月21日 下午9:00:50
 */
public class DragAndDrop {
	private static WebDriver driver = null ;
	private static String chromeDriverDir = "D:\workspace\A_Test\resource\chromedriver.exe";
	
	public static void main(String[] args) {
		//1.打开浏览器;
		System.setProperty("webdriver.chrome.driver", chromeDriverDir);
		driver = new ChromeDriver();
		driver.manage().window().maximize();
		//打开文件网址;
		driver.get("http://www.baidu.com/");
		//定位百度搜索按钮对象;
		WebElement draggable = driver.findElement(By.id("su"));
		/*
		 * 模拟鼠标拖拽元素对象,
		 * 1.需要声明Actions类对象;
		 * 2.使用Actions对象的dragAndDropBy方法实现鼠标拖拽操作;
		 */
		//声明Actions类对象;
		Actions action = new Actions(driver);
		
		//向右拖动10个像素,共拖拽5次
		for (int i = 0; i < 5; i++) {
			//10表示元素的横坐标向右移动10个像素,0表示元素的纵坐标不变;
			action.dragAndDropBy(draggable, 10, 0).build().perform();
		}
		
		driver.quit();
	}
}

四、模拟键盘操作


package com.automation.actions;

import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

/**
 * 类说明:模拟键盘的操作
 * <br/>
 * @version 1.0
 * 2016年11月21日 下午9:00:50
 */
public class KeyBoard {
	private static WebDriver driver = null ;
	private static String chromeDriverDir = "D:\workspace\A_Test\resource\chromedriver.exe";
	
	public static void main(String[] args) {
		//1.打开浏览器;
		System.setProperty("webdriver.chrome.driver", chromeDriverDir);
		driver = new ChromeDriver();
		driver.manage().window().maximize();
		//打开文件网址;
		driver.get("http://www.baidu.com/");
		
		//声明Actions类对象;
		Actions action = new Actions(driver);
		
		action.keyDown(Keys.CONTROL);//点击control键
		action.keyDown(Keys.SHIFT);//点击shift键
		action.keyUp(Keys.CONTROL);//松开control键
		action.keyUp(Keys.SHIFT);//松开shift键
		action.keyDown(Keys.TAB);//点击Tab键
		action.keyUp(Keys.TAB);//松开tab键
		driver.quit();
	}
}

尤其在搜索过程中,如果有联想功能,就需要用到键盘的上、下键来操作,这就需要使用到模拟键盘;

免责声明:文章转载自《基于Selenium2+Java的UI自动化(7)- 模拟键盘鼠标操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PyTorch模型读写、参数初始化、FinetuneFirefox浏览器怎么安装adobe flash player插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

selenium 隐式等待、显示等待

from selenium import webdriver # 显示等待-提供等待条件 from selenium.webdriver.support import expected_conditions as ec # 显示等待-显示等待类 from selenium.webdriver.support.ui import WebDriverWait...

v-model的实现原理

基础用法 v-model 本质上不过是语法糖,可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。v-model 会忽略所有表单元素的 ...

Java Swing 使用 java.awt 包中的 Desktop 类

介绍: 这个 Desktop 类是用于与各种桌面功能进行交互的。比如用一个 URL 来调用系统默认浏览器打开,具体看文档吧。 官方API 文档: https://docs.oracle.com/en/java/javase/14/docs/api/java.desktop/java/awt/Desktop.html 问:怎么用呢? 答: 下面是一个调用系统...

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。 【2】Qt事件 由窗口系统或Qt自身产生的,用以响应所发生各类事情的操作。具体点,Qt事件是一个QEvent对象,用于描述程序内部或外部发...

CSS专题(三):页面高度发微

一 背景   本文不讨论普通元素的大小和位置,仅仅讨论页面的大小和位置,而且为了简化问题,本文只讨论高度与顶部距离。笔者发现,页面的宽度与高度的表现有很多不同,细心的朋友会发现,故页面宽度另起文讨论,文章已经写好,见页面宽度发微。   这里说的页面高度,是指浏览器页面的高度。有以下四种元素能够表现页面的高度:window,html,document,bod...

Android数据库ORMlite框架04

2.10 索引成员 在你的数据类中ORMLite提供了一些多种成员索引有限的支持。首先,它重点指明任何已经被标记成id的成员变量已经被编入索引。一个id成员变量不需要添加额外构建的索引并且如果他们被指定的话那么数据库会产生错误。 添加一个索引到没有id的成员变量,你需要添加index = true布尔域到@DatabaseField注解。这将会在表被创建时...