我们已经学过了单击click() 方法,但这还不够,我们实际工作中通过鼠标除了单击外,我们还会用到右键,双击,拖拽等等,也可能需要用到键盘操作,那这些操作WebDriver的Actions类都支持。


在某元素上鼠标右键和双击

  1. 右键:contextClick().perform()
  2. 双击:doubleClick().perform()

两个方法如果传入WebElement参数,则在元素上右键或者双击,如果不传入任何参数,则在鼠标当前位置右键和双击。

代码示例:

  1. @Test
  2. public void keyTest() throws InterruptedException {
  3. driver.get("http://www.baidu.com");
  4. WebElement ele = driver.findElement(By.id("su"));
  5. Actions action = new Actions(driver);
  6. // 在元素上右键
  7. action.contextClick(ele).perform();
  8. Thread.sleep(3000);
  9. // 在上双击
  10. action.doubleClick(ele).perform();
  11. }

鼠标移动到某个元素上

  1. moveToElement(element).perform()

代码示例:

  1. @Test
  2. public void moveTest(){
  3. driver.get("http://www.qq.com/");
  4. WebElement ele = driver.findElement(By.className("searchSelected"));
  5. Actions action = new Actions(driver);
  6. // 鼠标移动到某个元素上
  7. action.moveToElement(ele).perform();
  8. }

把元素拖动到(x,y)上

  1. dragAndDropBy(WebElement,x,y).perform()

该方法传入三个参数,第一个是WebElement,第二个是x轴坐标,第三个是y轴坐标。

代码示例:

  1. @Test
  2. public void dragTest(){
  3. driver.get("file:///D:/html/dragAndDrop.html");
  4. WebElement ele = driver.findElement(By.id("drag"));
  5. Actions action = new Actions(driver);
  6. // 拖动某个元素到某个坐标
  7. action.dragAndDropBy(ele,500,500).perform();
  8. }

把元素拖动到另一个元素上

  1. clickAndHold(ele1).moveToElement(ele2).release(ele1).perform()

clickAndHold(ele1)按住元素1,moveToElement(ele2)移动到元素2,release(ele1)再释放元素1.

代码示例:

  1. @Test
  2. public void dragTest1(){
  3. driver.get("file:///D:/html/dragAndDrop.html");
  4. WebElement ele1 = driver.findElement(By.id("drag"));
  5. WebElement ele2 = driver.findElement(By.xpath("html/body/h1"));
  6. Actions action = new Actions(driver);
  7. // 在元素1上按住,然后拖动到元素2在释放
  8. action.clickAndHold(ele1).moveToElement(ele2).release(ele1).perform();
  9. }

模拟键盘操作

  1. 按住某个按键:keyDown()
  2. 松开某个按键:keyUp()

两个方法均传入Keys类型参数。注意的是Actions类提供的模拟键盘操作,只能模拟键盘键盘四周的按键,也就是无法模拟字母按键,如果需要模拟字母按键的操作可以结合Java的Robot类来实现。

代码示例:

  1. @Test
  2. public void selectedTest() throws InterruptedException {
  3. driver.get("file:///D:/html/index.html");
  4. // 定位下拉框
  5. WebElement selected = driver.findElement(By.id("selectWithMultipleEqualsMultiple"));
  6. // 定位下拉框中的选项
  7. java.util.List<WebElement> eles = selected.findElements(By.tagName("option"));
  8. Actions action = new Actions(driver);
  9. Thread.sleep(3000);
  10. // 按住 shift ,鼠标点击元素1和元素2
  11. action.keyDown(Keys.SHIFT).click(eles.get(1)).click(eles.get(2)).perform();
  12. }

Robot 类示例:

  1. @Test
  2. public void robotTest() throws AWTException, InterruptedException {
  3. Robot robot = new Robot();
  4. driver.get("file:///D:/html/index.html");
  5. // 按住 Ctrl + S
  6. robot.keyPress(KeyEvent.VK_CONTROL);
  7. robot.keyPress(KeyEvent.VK_S);
  8. Thread.sleep(3000);
  9. // 释放 Ctrl + S
  10. robot.keyRelease(KeyEvent.VK_CONTROL);
  11. robot.keyRelease(KeyEvent.VK_S);
  12. }

keyPress() 按住某个按键
keyRelease() 松开某个按键