Java&Selenium 鼠标键盘及滚动条控制相关方法封装
一、摘要
本片博文主要展示在使用Selenium with java做web自动化时,一些不得不模拟鼠标操作、模拟键盘操作和控制滚动条的java代码
二、模拟鼠标操作
package util; import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.WebDriver; public class MouseUtil {
/**
* 模拟鼠标左键单击
* @param driver
* @param xpathExpression
*/
public void lefClick(WebDriver driver, String xpathExpression) {
Actions actions = new Actions(driver);
// 鼠标左键在当前停留的位置做单击操作
actions.click();
// 鼠标左键点击指定的元素
actions.click(driver.findElement(By.xpath(xpathExpression)));
} /**
* 模拟鼠标右键单击
* @param driver
* @param xpathExpression
*/
public void rightClick(WebDriver driver, String xpathExpression) {
Actions actions = new Actions(driver);
// 鼠标右键在当前停留的位置做单击操作
actions.contextClick();
// 鼠标右键点击指定的元素
actions.contextClick(driver.findElement(By.xpath(xpathExpression)));
} /**
* 模拟鼠标左键双击
* @param driver
* @param xpathExpression
*/
public void doubleClick(WebDriver driver, String xpathExpression) {
Actions actions = new Actions(driver);
// 鼠标在当前停留的位置做双击操作
actions.doubleClick();
// 鼠标双击指定的元素
actions.doubleClick(driver.findElement(By.xpath(xpathExpression))); } /**
* 模拟鼠标拖拽
* @param driver
* @param source
* @param target
*/
public void dragAction(WebDriver driver, WebElement source, WebElement target) {
Actions actions = new Actions(driver);
// 鼠标拖拽动作,将 source 元素拖放到 target 元素的位置
actions.dragAndDrop(source, target);
} /**
* 模拟鼠标拖拽到某坐标
* @param driver
* @param source
* @param xOffset
* @param yOffset
*/
public void dragtoXY(WebDriver driver, WebElement source, int xOffset, int yOffset) {
Actions actions = new Actions(driver);
// 鼠标拖拽动作,将 source 元素拖放到 (xOffset, yOffset) 位置,其中 xOffset 为横坐标,yOffset 为纵坐标
actions.dragAndDropBy(source, xOffset, yOffset); } /**
* 模拟鼠标拖拽从元素A到元素B
* @param driver
* @param source
* @param target
*/
public void dragActionReleaseMouse(WebDriver driver, WebElement source, WebElement target) {
Actions actions = new Actions(driver);
// 鼠标拖拽动作,将 source 元素拖放到 target 元素的位置
actions.clickAndHold(source).moveToElement(target).perform();
actions.release();
} /**
* 模拟鼠标单击并不释放
* @param driver
* @param element
*/
public void clickAndHole(WebDriver driver, WebElement element) {
Actions actions = new Actions(driver);
//action.clickAndHold();鼠标悬停在当前位置,既点击并且不释放
// 鼠标悬停在 onElement 元素的位置
actions.clickAndHold(element);
} /**
* 模拟鼠标拖拽
* @param driver
* @param xOffset
* @param yOffset
*/
public void moveToXY(WebDriver driver, int xOffset, int yOffset){
Actions actions = new Actions(driver);
/**将鼠标移到元素 toElement 的 (xOffset, yOffset) 位置,这里的 (xOffset, yOffset) 是以元素 toElement 的左上角为 (0,0) 开始的 (x, y) 坐标轴
*action.moveToElement(toElement,xOffset,yOffset)
*以鼠标当前位置或者 (0,0) 为中心开始移动到 (xOffset, yOffset) 坐标轴*/
actions.moveByOffset(xOffset, yOffset);
actions.release();// 释放鼠标
}
}
三、模拟键盘操作
package util;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent; public class KeyBoardUtil {
/**Tab键封装*/
public static void pressTabKey(){
Robot robot = null;
try{
robot = new Robot();
}catch (AWTException e){
e.printStackTrace();
}
//调用keypress方法来实现按下Tab键
assert robot != null;
robot.keyPress(KeyEvent.VK_TAB);
//调用keyrelease方法来实现释放Tab键
robot.keyRelease(KeyEvent.VK_TAB);
}
/**Enter键封装*/
public static void pressEnterKey(){
Robot robot = null;
try{
robot = new Robot();
}catch (AWTException e){
e.printStackTrace();
}
//调用keypress方法来实现按下Enter键
assert robot != null;
robot.keyPress(KeyEvent.VK_ENTER);
//调用keyrelease方法来实现释放Enter键
robot.keyRelease(KeyEvent.VK_ENTER);
}
/**将指定字符串设为剪切板内容,执行黏贴操作
*将页面焦点切换到输入框后,调用此函数,将指定字符串黏贴到输入框
*/
public static void setAndctrlVClipboardData(String string){
StringSelection stringSelection = new StringSelection(string);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
Robot robot = null;
try{
robot = new Robot();
}catch (AWTException e){
e.printStackTrace();
}
assert robot != null;
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
} /**
* 键盘向下键封装
*/
public static void pressDownKey(){
Robot robot = null;
try{
robot = new Robot();
}catch (AWTException e){
e.printStackTrace();
}
assert robot != null;
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
}
}
四、控制滚动条
package util;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement; public class ScrollBarUtil {
/**
* 控制滚动条向下拉到底
* @param driver 浏览器驱动
*/
public static void toBottom(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//向下拉到底//
js.executeScript("document.documentElement.scrollTop=10000");
} /**
* 控制滚动条向上拉到顶
* @param driver 浏览器驱动
*/
public static void toTop(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//向上拉到顶
js.executeScript("document.documentElement.scrollTop=0");
} /**
* 控制滚动条向下拉到底
* @param driver 浏览器驱动
*/
public static void scrolltoBottom(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//向下拉到底
js.executeScript("window.scrollTo(0,100000)");
} /**
* 控制滚动条向上拉到顶
* @param driver 浏览器驱动
*/
public static void scrolltoTop(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//向上拉到顶
js.executeScript("window.scrollTo(0,1)");
} /**
* 控制滚动条拉到中间
* @param driver 浏览器驱动
*/
public static void verticaltoMiddle(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//上下拉到中间
js.executeScript("window.scrollBy(0, 0-document.body.scrollHeight *1/2)");
} /**
* 控制水平滚动条左右拉到中间
* @param driver 浏览器驱动
*/
public static void horizontaltoMiddle(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//左右拉到中间
js.executeScript("window.scrollBy(0, 0-document.body.scrollWidht *1/2)");
} /**
* 控制滚动条拉到元素可见
* @param driver 浏览器驱动
* @param element 页面元素定位
*/
public static void scrolltoPresence(WebDriver driver, WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
//移动到元素element对象的“顶端”与当前窗口的“顶部”对齐
//js.executeScript("arguments[0].scrollIntoView();", element);
js.executeScript("arguments[0].scrollIntoView(true);", element);
//移动到元素element对象的“底端”与当前窗口的“底部”对齐
//js.executeScript("arguments[0].scrollIntoView(false);", element);
} /**
* 使用JavaScript的ScrollTo函数和document.body.scrollHeight参数
* 将页面滚动到最下方
* @param driver 浏览器驱动
*/
public static void scrollingToBottomofPage(WebDriver driver){
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
try{
Thread.sleep(3000);
}catch (InterruptedException e){
e.printStackTrace();
}
} /**
* 使用JavaScript的ScrollTo函数,使用0和800的横纵坐标参数
* 将页面的滚动条纵向下滑800个像素
* @param driver 浏览器驱动
*/
public static void scrollingByCoordinateofPage(WebDriver driver){ ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,200)");
try{
Thread.sleep(3000);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
Java&Selenium 鼠标键盘及滚动条控制相关方法封装的更多相关文章
- Java&Selenium 模拟键盘方法封装
Java&Selenium 模拟键盘方法封装 package util; import java.awt.AWTException; import java.awt.Robot; import ...
- selenium 鼠标,键盘操作
1.打开和关闭网页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/env python # -*- coding:u ...
- python selenium鼠标键盘操作(ActionChains)
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件--ActionChains sele ...
- 自动化测试基础篇--Selenium鼠标键盘事件
摘自https://www.cnblogs.com/sanzangTst/p/7477382.html 前面几篇文章我们学习了怎么定位元素,同时通过实例也展示了怎么切换到iframe,怎么输入用户名和 ...
- Java selenium web页面的滚动条操作
摘录自:http://blog.csdn.net/iceryan/article/details/8162703 //移动到元素element对象的"顶端"与当前窗口的" ...
- java+selenium使用JS、键盘滑动滚动条
本篇文章介绍如何使用JS和键盘对象对页面进行滑动滚动条-------------主要针对java做自动化测试的同学 一:使用键盘对象操作滚动条 //导包 import org.openqa.selen ...
- Java&Selenium控制滚动条方法封装
Java&Selenium控制滚动条方法封装 package util; import org.openqa.selenium.JavascriptExecutor; import org.o ...
- 用鼠标键盘来控制你的Android手机——同屏显示简单教程
今天在微博上看到有人用电脑鼠标操作iPhone手机玩打飞机游戏,非常炫,虽然自己用的不是iPhone,但相信Android手机肯定也能实现这样的功能,于是网上各种搜索方法,终于看到了一篇试用成功的帖子 ...
- 【Unity3D】使用鼠标键盘控制Camera视角(即时战略类游戏视角):缩近,拉远,旋转
今天写一个demo,要用到鼠标键盘控制三维视角,因此写了个脚本用于控制. 该脚本可以用于即时战略类游戏的视角,提供了缩进,拉伸,旋转.同时按住鼠标右键不放,移动鼠标可以实现第一人称视角的效果. usi ...
随机推荐
- ubuntu下删除带锁文件夹
1.终端下,cd 到要删带锁文件夹所在目录 2.输入 + 带锁文件夹名称 输入用户密码,解锁成功 3.现在该文件可以进行移动或者删除
- MATLAB符号求解极限积分微分级数2
一.符号表达式的极限 limit(F,x,a):求当时,符号表达式F的极限. limit(F,a):符号表达式F采用默认自变量(可由函数findsym求得),该函数求F的自变量趋于a时的极限值. li ...
- PYTHON 100days学习笔记008-4:错误和异常
目录 Day008_04:python错误和异常 1.语法错误 2.异常 3.异常处理 4.抛出异常 5.用户自定义异常 6.定义清理行为 7.预定义的清理行为 参考文章: python3错误和异常 ...
- 《Brennan's Guide to Inline Assembly》学习笔记
原文见Brennan's Guide to Inline Assembly. AT&T语法 vs Intel语法 DJGPP是基于GCC的,因此它使用AT&T/UNIT语法,这和Int ...
- uva11624 Fire! (bfs预处理)
题目链接:https://vjudge.net/problem/UVA-11624 题意:给一个1000×1000的矩阵,有几个着火点和Joe,着火点和Joe每个单位时间均移动一个单位,求Joe逃出的 ...
- 1、spring mvc jsp页面中文乱码
jsp 页面头部 的page标签中加个 contentType="text/html;charset=utf-8"
- Redis提供的持久化机制
Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,Redis的作者在博客中写到, ...
- [DEBUG] spring boot在eclipse中用maven打包成jar访问templates报500错误
更新:打war包的话只要把html文件放在resources/templates下即可,根本不需要放外面. 配置application.yml和templates放外面这种做法,打war包确实不行. ...
- 剑指offer29:最小的k个数
1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 2 思路和方法,C++核心代码 2.1 sort()函数,ve ...
- 第十四章 ZYNQ TIMER定时器中断
上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 本文所使用的开发板是Miz702 PC 开发环 ...