我们已经学过了单击click() 方法,但这还不够,我们实际工作中通过鼠标除了单击外,我们还会用到右键,双击,拖拽等等,也可能需要用到键盘操作,那这些操作WebDriver的Actions类都支持。
在某元素上鼠标右键和双击
右键:contextClick().perform()
双击:doubleClick().perform()
两个方法如果传入WebElement参数,则在元素上右键或者双击,如果不传入任何参数,则在鼠标当前位置右键和双击。
代码示例:
@Test
public void keyTest() throws InterruptedException {
driver.get("http://www.baidu.com");
WebElement ele = driver.findElement(By.id("su"));
Actions action = new Actions(driver);
// 在元素上右键
action.contextClick(ele).perform();
Thread.sleep(3000);
// 在上双击
action.doubleClick(ele).perform();
}
鼠标移动到某个元素上
moveToElement(element).perform()
代码示例:
@Test
public void moveTest(){
driver.get("http://www.qq.com/");
WebElement ele = driver.findElement(By.className("searchSelected"));
Actions action = new Actions(driver);
// 鼠标移动到某个元素上
action.moveToElement(ele).perform();
}
把元素拖动到(x,y)上
dragAndDropBy(WebElement,x,y).perform()
该方法传入三个参数,第一个是WebElement,第二个是x轴坐标,第三个是y轴坐标。
代码示例:
@Test
public void dragTest(){
driver.get("file:///D:/html/dragAndDrop.html");
WebElement ele = driver.findElement(By.id("drag"));
Actions action = new Actions(driver);
// 拖动某个元素到某个坐标
action.dragAndDropBy(ele,500,500).perform();
}
把元素拖动到另一个元素上
clickAndHold(ele1).moveToElement(ele2).release(ele1).perform()
clickAndHold(ele1)按住元素1,moveToElement(ele2)移动到元素2,release(ele1)再释放元素1.
代码示例:
@Test
public void dragTest1(){
driver.get("file:///D:/html/dragAndDrop.html");
WebElement ele1 = driver.findElement(By.id("drag"));
WebElement ele2 = driver.findElement(By.xpath("html/body/h1"));
Actions action = new Actions(driver);
// 在元素1上按住,然后拖动到元素2在释放
action.clickAndHold(ele1).moveToElement(ele2).release(ele1).perform();
}
模拟键盘操作
按住某个按键:keyDown()
松开某个按键:keyUp()
两个方法均传入Keys类型参数。注意的是Actions类提供的模拟键盘操作,只能模拟键盘键盘四周的按键,也就是无法模拟字母按键,如果需要模拟字母按键的操作可以结合Java的Robot类来实现。
代码示例:
@Test
public void selectedTest() throws InterruptedException {
driver.get("file:///D:/html/index.html");
// 定位下拉框
WebElement selected = driver.findElement(By.id("selectWithMultipleEqualsMultiple"));
// 定位下拉框中的选项
java.util.List<WebElement> eles = selected.findElements(By.tagName("option"));
Actions action = new Actions(driver);
Thread.sleep(3000);
// 按住 shift ,鼠标点击元素1和元素2
action.keyDown(Keys.SHIFT).click(eles.get(1)).click(eles.get(2)).perform();
}
Robot 类示例:
@Test
public void robotTest() throws AWTException, InterruptedException {
Robot robot = new Robot();
driver.get("file:///D:/html/index.html");
// 按住 Ctrl + S
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
Thread.sleep(3000);
// 释放 Ctrl + S
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_S);
}
keyPress() 按住某个按键
keyRelease() 松开某个按键