当前位置: 首页 > news >正文

自动化测试 — selenium + Java

什么是自动化测试

        将人为驱动的测试行为转化为机器执行的过程。

        自动化测试包括UI 自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI ),可以用较少的投入获得很好的收益。

selenium 

        Selenium 是 W eb  应用中基于  UI  的自动化测试框架,支持跨平台、多浏览器、多语言。

工作原理

Selenium + Java 环境搭建 

一、推荐使用 Chrome 浏览器。先查看浏览器版本:

二、因为我的版本是 127 的,所以需要去这个地方下载:下载链接

三、把压缩包解压后把 chromedriver.exe 复制到:

① Chrome 浏览器目录下:

② Java - jdk 的 bin 目录下:

四、创建 Java Maven 项目,引入 pom.xml 依赖

<dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>
</dependencies>

五、创建一个 Java 类,验证环境是否配置成功:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class Test {public static void main(String[] args) {ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");     // 允许所有的请求WebDriver webDriver = new ChromeDriver(options);webDriver.get("https://www.baidu.com");    // 打开百度首页}
}

Selenium 常用的 API

定位元素

findElement:css 选择

// 选中百度搜索框
WebElement element = webDriver.findElement(By.cssSelector("#kw"));

xpath 选择

// 选中百度搜索框
WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));

操作测试对象的 API

click:  点击对象
send_keys:  在对象上模拟按键输入
clear:  清除对象输入的文本内容
submit:  提交(效果和 click 一样,但是这个元素要在 form 表单中,否则会报错)
text:  用于获取元素的文本信息
    // 往搜索框输入内容element.sendKeys("奥运会");// 找到 百度一下 按钮,然后点击webDriver.findElement(By.cssSelector("#su")).click();// 清空输入框webDriver.findElement(By.cssSelector(".s_ipt")).clear(); 

添加等待

    // 硬等三秒sleep(3000);// 隐式等待,如果发现了要找的元素就停止等待,到时间了还没找到就报错webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.HOURS);  

打印信息(获取信息)

打印 title / url:

    String url = webDriver.getCurrentUrl();String title = webDriver.getTitle();if (url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")) {System.out.println("测试成功");} else {System.out.println("测试失败");}

浏览器的操作

    // 浏览器后退sleep(3000);webDriver.navigate().back();// 浏览器刷新webDriver.navigate().refresh();// 浏览器前进sleep(3000);webDriver.navigate().forward();// 将浏览器的滚动条滚到最下面sleep(3000);((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");// 把浏览器设置全屏sleep(3000);webDriver.manage().window().fullscreen();// 把浏览器设置最大化(还有 X 这些)sleep(3000);webDriver.manage().window().maximize();// 把浏览器设置成自定义大小sleep(3000);webDriver.manage().window().setSize(new Dimension(600, 1000));

操作键盘

    // control + Asleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");// control + Xsleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");// control + Vsleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");

操作鼠标

    // 找到图片按钮sleep(3000);WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));// 鼠标右击Actions actions = new Actions(webDriver);sleep(3000);// moveToElement 表示移动到哪个元素上,   perform 表示把点击后的效果显示出来actions.moveToElement(webElement).contextClick().perform();// 鼠标双击actions.moveToElement(webElement).doubleClick().perform();// 鼠标拖动actions.moveToElement(webElement).dragAndDrop().perform();

定位一组元素

假设一个页面上有单选框和复选框,目前只点击所有的复选框:

    // findElements 获取的是一组元素List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));for (WebElement webElement : webElements) {// 通过 getAttribute 获取元素上的 type 值是否为 checkbox,如果是就点击if (webElement.getAttribute("type").equals("checkbox")) {webElement.click();}}

有 frame 的时候:

    webDriver.switchTo().frame("f1");  // 如果没有这一行直接执行下一行是找不到的,把当前定位的主体切换了frame里。webDriver.findElement(By.cssSelector("body > div > a")).click();

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Docker最佳实践(四):安装redis
  • IDEA彻底卸载以及安装总结
  • 江科大/江协科技 STM32学习笔记P21
  • 加密案例分享:电子设备制造行业
  • 鸿蒙(API 12 Beta2版)媒体开发【Audio Kit简介】音频服务
  • python实战:数据分析基础知识
  • MySQL——索引(三)删除索引
  • 【Nacos无压力源码领读】(二) 集成 LoadBalancer 与 OpenFeign
  • flink1.18 编译遇到的问题
  • AI入门指南(二):算法、训练、模型、大模型是什么?
  • 【Linux】Ubuntu20.04系统中能在命令行ping通百度等网站,而在浏览器中不能上网的问题解决方法
  • OracleDatabaseException:sequence is not exist
  • 2.类和对象(上)
  • 009 | 上证50ETF基金数据分析及预测
  • Golang编译-如何忽略某些文件去编译
  • Apache的基本使用
  • Java IO学习笔记一
  • Java 网络编程(2):UDP 的使用
  • Otto开发初探——微服务依赖管理新利器
  • React系列之 Redux 架构模式
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 简单实现一个textarea自适应高度
  • 每天10道Java面试题,跟我走,offer有!
  • 深度解析利用ES6进行Promise封装总结
  • 延迟脚本的方式
  • 自定义函数
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 如何正确理解,内页权重高于首页?
  • ​Linux·i2c驱动架构​
  • ​比特币大跌的 2 个原因
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # Redis 入门到精通(七)-- redis 删除策略
  • #### golang中【堆】的使用及底层 ####
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #pragma pack(1)
  • (27)4.8 习题课
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (二)学习JVM —— 垃圾回收机制
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (四)opengl函数加载和错误处理
  • (四)图像的%2线性拉伸
  • (未解决)macOS matplotlib 中文是方框
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .bat批处理(六):替换字符串中匹配的子串
  • .htaccess 强制https 单独排除某个目录
  • .net core 6 集成和使用 mongodb
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net 高效开发之不可错过的实用工具
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据