一、如何按键盘上的按键:
1 package keypress; 2 3 import static org.junit.jupiter.api.Assertions.*; 4 5 import java.util.concurrent.TimeUnit; 6 7 import org.junit.jupiter.api.AfterEach; 8 import org.junit.jupiter.api.BeforeEach; 9 import org.junit.jupiter.api.Test; 10 import org.openqa.selenium.By; 11 import org.openqa.selenium.Keys; 12 import org.openqa.selenium.WebDriver; 13 import org.openqa.selenium.chrome.ChromeDriver; 14 15 class KeyPressDemo1 { 16 17 WebDriver driver; 18 String url; 19 20 @BeforeEach 21 void setUp() throws Exception { 22 driver = new ChromeDriver(); 23 url = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.lang=en-US&.done=https%3A%2F%2Fwww.yahoo.com"; 24 driver.manage().window().maximize(); 25 driver.manage().timeouts().implicitlyWait(2000, TimeUnit.SECONDS); 26 driver.get(url); 27 } 28 29 @Test 30 void test() throws InterruptedException { 31 driver.findElement(By.id("login-username")).sendKeys("test"); 32 Thread.sleep(2000); 33 // 按键盘上的enter按钮,发送回车键 34 // Keys.按键:可以根据自己的需要进行相应的按键设置 35 driver.findElement(By.id("login-signin")).sendKeys(Keys.ENTER); 36 } 37 38 @AfterEach 39 void tearDown() throws Exception { 40 Thread.sleep(2000); 41 driver.quit(); 42 } 43 }
二、如何按键盘上的组合键:
1 package keypress; 2 3 import static org.junit.jupiter.api.Assertions.*; 4 5 import java.util.concurrent.TimeUnit; 6 7 import org.junit.jupiter.api.AfterEach; 8 import org.junit.jupiter.api.BeforeEach; 9 import org.junit.jupiter.api.Test; 10 import org.openqa.selenium.By; 11 import org.openqa.selenium.Keys; 12 import org.openqa.selenium.WebDriver; 13 import org.openqa.selenium.chrome.ChromeDriver; 14 15 class KeyPressDemo2 { 16 17 WebDriver driver; 18 String url; 19 20 @BeforeEach 21 void setUp() throws Exception { 22 driver = new ChromeDriver(); 23 url = "file:///C:/Users/acer/Desktop/%E5%85%B6%E5%AE%83/PracticePage2.html"; 24 driver.manage().window().maximize(); 25 driver.manage().timeouts().implicitlyWait(2000, TimeUnit.SECONDS); 26 driver.get(url); 27 } 28 29 @Test 30 void test() throws InterruptedException { 31 // 方法一: 32 // driver.findElement(By.id("openwindow")).sendKeys(Keys.CONTROL+"a"); 33 34 // 方法二: 35 // driver.findElement(By.id("openwindow")).sendKeys(Keys.chord(Keys.CONTROL,"a")); 36 // chord方法返回值是String类型的,为了便于理解,因此我们可以这样写: 37 String seclect = Keys.chord(Keys.CONTROL,"a"); 38 driver.findElement(By.id("openwindow")).sendKeys(seclect); 39 Thread.sleep(2000); 40 41 } 42 43 @AfterEach 44 void tearDown() throws Exception { 45 Thread.sleep(2000); 46 driver.quit(); 47 } 48 }
三、用Actions类直接处理按键事件
1 package keypress; 2 3 import java.util.concurrent.TimeUnit; 4 5 import org.junit.jupiter.api.AfterEach; 6 import org.junit.jupiter.api.BeforeEach; 7 import org.junit.jupiter.api.Test; 8 import org.openqa.selenium.Keys; 9 import org.openqa.selenium.WebDriver; 10 import org.openqa.selenium.chrome.ChromeDriver; 11 import org.openqa.selenium.interactions.Actions; 12 13 class KeyPressDemo3 { 14 15 WebDriver driver; 16 String url; 17 18 @BeforeEach 19 void setUp() throws Exception { 20 driver = new ChromeDriver(); 21 url = "file:///C:/Users/acer/Desktop/%E5%85%B6%E5%AE%83/PracticePage2.html"; 22 driver.manage().window().maximize(); 23 driver.manage().timeouts().implicitlyWait(2000, TimeUnit.SECONDS); 24 driver.get(url); 25 } 26 27 @Test 28 void test() { 29 Actions actions = new Actions(driver); 30 actions.keyDown(Keys.CONTROL).sendKeys("a").keyDown(Keys.CONTROL).perform(); 31 } 32 33 @AfterEach 34 void tearDown() throws Exception { 35 Thread.sleep(2000); 36 driver.quit(); 37 } 38 }
注:
1、actions操作按键时,有按下动作,也需要有松开动作。
keyDown():表示按下按键动作
keyDown(Keys.CONTROL).sendKeys("a"):表示同时按下Ctrl+A键
keyDown():表示松开按键动作
keyDown(Keys.CONTROL):表示松开Ctrl键
2、actions方法都需要使用.perform()执行,如果.perform()不能成功执行actions,那么还需要加上.bulid.perform()。
3、使用actions可以直接操作按键,不需要先查找元素。
如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。