鼠标点击操作
鼠标点击事件有以下几种类型:
//记得最后一定要调用perform,否则click并没有真正执行
清单 1. 鼠标左键点击
Actions action = new Actions(dr);action.click();// 鼠标左键在当前停留的位置做单击操作清单 2. 鼠标右键点击
Actions action = new Actions(dr);
action.contextClick(dr.findElement(element)).perform();// 鼠标右键点击指定的元素
清单 3. 鼠标双击操作
Actions action = new Actions(dr);
action.doubleClick();// 鼠标在当前停留的位置做双击操作
action.doubleClick(dr.findElement(element).perform();// 鼠标双击指定的元素
清单 4.鼠标拖拽动作(可以用来测试鼠标是否手型显示)
Actions action = new Actions(dr);
WebElement source = dr.findElement(element);
WebElement target = dr.findElement(element));
// 鼠标拖拽动作,将 source 元素拖放到 target 元素的位置。
action.dragAndDrop(source, target);
action.clickAndHold(source).moveToElement(target).perform();
action.release();
清单 5. 鼠标悬停操作(可以测试鼠标放到超链接或者按钮上字体颜色发生变化,及页面左下角显示超链接地址)
Actions action = new Actions(dr);
action.clickAndHold();// 鼠标悬停在当前位置,既点击并且不释放
action.clickAndHold(onElement);// 鼠标悬停在 onElement 元素的位置
action.clickAndHold(onElement).perform(); //这个方法实际上是执行了两个动作,首先是鼠标移动到元素 onElement,然后再 clickAndHold, 所以这个方法也可以写成 action.moveToElement(onElement).clickAndHold()。
清单 6.鼠标释放操
Actions action = new Actions(driver);
action.release();//释放鼠标
键盘模拟操作
Actions action = new Actions(driver);
WebElement element = dr.findElement(By.id("kw"));
action.keyUp(element,Keys.SHIFT).sendKeys("222",Keys.ENTER).keyDown(Keys.SHIFT).perform();
Assert.assertTrue(element.getAttribute("value").contains("@@@"));
keyDown表示按下键盘,keyUp表示松开键盘。上述代码中先是执行keyDown,这时shift键按下后面的sendKeys内容也是在shift键按下的情况输入的,所以实际输入的是@@@
清单 8. 验证焦点显示
当 Actions的 sendKeys(keysToSend)执行完之后,焦点就不在当前元素了。所以我们可以使用sendKeys(Keys.TAB)来切换元素的焦点,从而达到选择元素的作用,这个最常用到的场景就是在用户名和密码的输入过程中。
element.sendKeys("dddd",Keys.TAB);
清单 9.修饰键方法 KeyDown(theKey)、keyUp(theKey)
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL);// 按下 Ctrl 键
action.keyDown(Keys.SHIFT);// 按下 Shift 键
action.keyDown(Key.ALT);// 按下 Alt键
action.keyUp(Keys.CONTROL);// 释放 Ctrl 键
action.keyUp(Keys.SHIFT);// 释放 Shift键
action.keyUp(Keys.ALT);// 释放 Alt键
所以要通过 Alt+F4来关闭当前的活动窗口,可以通过下面语句来实现:action.keyDown(Keys.ALT).keyDown(Keys.F4).keyUp(Keys.ALT).perform();
而如果是对于像键盘上面的字母键 a,b,c,d...等的组合使用,可以通过以下语句实现:action.keyDown(Keys.CONTROL).sednKeys(“a”).perform();
清单 10.批量上传文件
/**
*
* @Description:在百度云上测试文件批量上传功能,主要是通过循环的方式去做单一
*的上传动作 , 登陆过程已经去掉
*/
@Test
public void test_mutilUploadFile() throwsException {
System.out.println("upload start");
//获取上传控件元素
WebElement uploadButton =driver.findElement(By.name("html5uploader"));
//构建上传文件路径,将需要上传的文件添加到 CharSequence数组
CharSequence[] files = new CharSequence[5];
files[0] ="C:\\test\\test1.txt";
files[1] = "C:\\test\\test2.txt";
files[2] ="C:\\test\\test3.txt";
files[3] ="C:\\test\\test4.txt";
files[4] ="C:\\test\\test5.txt";
//循环列出每支需要上传的文件路径,做单一上传动作
for(CharSequencefile: files){
uploadButton.sendKeys(file);
}
Thread.sleep(2000);
System.out.println("upload end");
}
当执行结束后,效果如图 1。
图 1.批量上传文件
结束语
在 SeleniumWebDriver中,有了 Actions类和 Keys 枚举对键盘和鼠标的操作已经做的非常到位,再结合 Java本身 Robot、KeyEvent等类的使用,基本上可以满足工作中遇到的对鼠标键盘操作的应用了。
其次要注意的地方是 WebDriver对浏览器的支持问题,Selenium WebDriver支持的浏览器非常广泛,从 IE、Firefox、Chrome到 Safari 等浏览器, WebDriver 都有相对应的实现:InterntExplorerDriver、FirefoxDriver、ChromeDriver、SafariDriver、AndroidDriver、 IPhoneDriver、HtmlUnitDriver等。根据个人的经验,Firefox以及 Chrome 浏览器对 WebDriver 的支持最好了,Firefox 搭上 Firebug 以及 Firepath, 在写脚本的过程中非常方便,而 ChromeDriver是 Google 公司自己支持与维护的项目。HtmlUnitDriver速度最快,一个纯 Java实现的浏览器。IE 比较慢,而且对于 Xpath 等支持不是很好。更多关于 SeleniumWebDriver的知识,大家可以从下面的链接去访问 Selenium官方文档。
js滚动
JavascriptExecutor JS=(JavascriptExecutor) driver;
Stringhigh="scroll(0,10000);";
JS.executeScript(high);
模仿键盘复制粘贴
Actions action = new Actions(dr);
dr.findElement(By.id("kw")).sendKeys("das1111111111",Keys.ENTER);
Thread.sleep(3000);
dr.findElement(By.id("kw")).click();
action.sendKeys(Keys.CONTROL+"a").perform();
Thread.sleep(3000);
action.sendKeys(Keys.CONTROL+"c").perform();
Thread.sleep(3000);
action.sendKeys(Keys.CONTROL+"v").perform();
不知道为什么把我的代码复制到文本框?合适让我无语呢。。。