1. 键盘事件
1.1 键盘按键用法
要使用键盘按键,必须引入keys 包: from selenium.webdriver.common.keys import Keys 通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
send_keys(Keys.SPACE) #空格键
send_keys(Keys.ESCAPE) #回退键(Esc)
1、回车
// 回车webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
private static void Test14() throws InterruptedException {// 创建一个浏览器驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com/");// 输入“蛋糕”webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");sleep(3000);// 回车webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);sleep(3000);// 校验List<WebElement> webElements = webDriver.findElements(By.xpath("//font[text()=\"沈梦瑶\"]"));sleep(3000);int flag = 0;// 找到搜索结果,如果有蛋糕这个关键词对应的元素,测试通过// 否则测试不通过for(int i = 0; i < webElements.size(); i++) {if(webElements.get(i).getText().equals("蛋糕")) {flag = 1;break;}}if(flag == 1) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}
1.2 键盘组合键用法
send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
代码如下:
private static void Test15() throws InterruptedException {// 创建一个浏览器驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com");// 输入“蛋糕”webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");sleep(3000);// Ctrol + AwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");sleep(4000);// Ctrol + XwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");sleep(4000);// Ctrol + VwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");sleep(4000);// 点击百度一下按钮webDriver.findElement(By.cssSelector("#su")).click();// 校验String no_expected_url = "https://www.baidu.com/";String cur_url = webDriver.getCurrentUrl();if(cur_url.equals(no_expected_url)) {System.out.println("测试不通过");} else {System.out.println("测试通过");}}
2. 鼠标事件
ActionChains(driver) 生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。
move_to_element(element) 移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素
perform() 执行所有存储的行为
ActionChains 类
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 移动
2.1 右键鼠标
代码如下:
private static void Test16() throws InterruptedException {// 创建一个驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com/");// 输入“企业微信”webDriver.findElement(By.cssSelector("#kw")).sendKeys("企业微信");webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);// 鼠标操作// 先要创建一个ActionsActions actions = new Actions(webDriver);sleep(3000);// 找到目标元素(图片这个按钮)WebElement target = webDriver.findElement(By.cssSelector("#searchTag > div > div > a:nth-child(2) > span"));sleep(3000);// 鼠标挪动到这个按钮上actions.moveToElement(target).contextClick().perform();}
想要右键鼠标且能看到效果,就要在后面的操作中加oerform语句;
2.2 切换窗口
代码如下:
本本分代码设计到从百度首页到新闻页面之后,我们的鼠标能够顺利的在新闻页面找到输入框,这里就涉及到页面资源,我们要使用getWindowHandle()来得到当前浏览器中所有的页面资源;
private static void Test17_v2() throws InterruptedException {// 创建一个驱动WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/");// 点击新闻按钮webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();sleep(5000);// 获取到当前的窗口句柄String cur_handle = webDriver.getWindowHandle();System.out.println("当前窗口句柄等于:" + cur_handle);// 获取到浏览器当前所有的窗口句柄Set<String> all_handles = webDriver.getWindowHandles();String target = "";// 遍历当前浏览器所有的窗口句柄for (String temp : all_handles) {if(!temp.equals(cur_handle)) {webDriver.switchTo().window(temp);}}// 将窗口句柄切换到最后一个窗口句柄sleep(3000);// 找到新闻搜索框// 输入“经济新闻头条”webDriver.findElement(By.cssSelector("#ww")).sendKeys("经济头条");// 点击百度一下按钮webDriver.findElement(By.cssSelector("#s_btn_wr")).click();// 找到搜索结果// 如果搜索结果中包含经济或者头条,此时测试通过sleep(3000);List<WebElement> webElements = webDriver.findElements(By.xpath("//em[text()=\"经济\"]"));sleep(3000);int flag = 0;for(int i = 0; i < webElements.size(); i++) {if(webElements.get(i).getText().equals("经济") || webElements.get(i).getText().equals("头条")) {flag = 1;break;}}if(flag == 1) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}
结果如下所示:
2.3 截图
通过selenium来进行截图操作:
步骤一:首先进入到中央仓库;
步骤二:搜索输入:common-io,选择下图所示:
步骤三:选择2.15.1的内容
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.15.1</version>
</dependency>
将该段代码放入到pom文件;
所以关于截图操作的代码如下所示:
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
我们将我们的驱动器进行类型强制转化,在进行截图之后将该数据使用文件的形式存放起来;
private static void Test18() throws InterruptedException, IOException {// 创建驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com");// 输入“刘力菲”webDriver.findElement(By.cssSelector("#kw")).sendKeys("刘力菲");// 搜索webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);// 截图,把截得图放到了file临时变量//此处也是进行了强制类型转换//通过文件的形式将我们的额数据进行保存File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);// 把file保存到磁盘中FileUtils.copyFile(file, new File("D://截图2024_01_24.png"));webDriver.quit();}
故此代码运行成功‘;
3.定位一组元素
3.1 框的点击
选择所有的方选框;
代码如下所示:
private static void Page01() {WebDriver webDriver = new ChromeDriver();webDriver.get("http://localhost:63342/Selenium2024_01_20/Page/test01.html?_ijt=crt4qqbabj9uugecnbv5fr0djh&_ij_reload=RELOAD_ON_SAVE");List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));for(int i = 0; i < webElements.size(); i++) {if(webElements.get(i).getAttribute("type").equals("checkbox")) {webElements.get(i).click();}}}
结果如下所示:
3.2 多框架页面
private static void Page02() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("http://localhost:63342/Selenium2024_01_20/Page/test02.html?_ijt=aumg7c4b16s14h3vt2atkcl1f4&_ij_reload=RELOAD_ON_SAVE");webDriver.switchTo().frame("f1");sleep(3000);webDriver.findElement(By.cssSelector("body > div > div > a")).click();}
我们在面对多框架页面的时候,要在选择定位元素之前要知道该元素在那一个页面框架上,所以我们要使用switchTo.frame来进行框架的转换;
ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!!
封面截图来自刘姝贤的毕业公演的pv;
url:【流水线的流水账】江西几日游_哔哩哔哩_bilibili