1. 什么是自动化
1.1 自动化概念
自动化就是解放测试人员双手,测试工作由代码代替人工执行测试工作。
自动化不能完全代替手工测试。
自动化测试指软件测试的自动化,在预设状态下运行应用程序或系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。
1.2 自动化分类
UI测试:
- 测试对象:前端页面
- 工具:Selenium、Airtest、Appium.....
接口测试:
- 测试对象:后端测试
- 工具:postman、Jmeter、request+unittest(python)、HttpClient+Junit(java)....
单元测试:
- 测试对象:一个一个的方法
- 工具:Junit & TestNG(java)、Unittest & pytest(python)......
金字塔从下至上特点:
- 越往上越接近用户
- 越往上定位问题的成本越高
1.3 自动化好处
- 提高测试效率
- 一定程度上保障软件质量
2. Selenium
2.1 什么是Selenium
Selenium是一个用来测试web前端的一个自动化框架
2.2 特点
- 开源的,可以查看源码
- 支持多语言:Java、Python、C#、Ruby
- 支持多种浏览器:Chrome、Edge、Opera...
- 有丰富的API
3. Selenium原理
1. 三个角色
(1)自动化脚本代码:编写的自动化测试用例(代码)
(2)webdriver浏览器驱动:可执行程序
(3)浏览器:Chrome、Edge、Opera...
2. 三个角色之间的关系
- 启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的remote server。
- 客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情)。
- Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。
4. Selenium API
1. 验证环境搭建是否成功
2. 如何打开网页、如何关闭浏览器
3. 定位元素
CSS选择器定位
- 通过id选择器定位 #kw
- class选择器定位 .s_ipt
- 标签选择器定位元素 标签值
- 父级子级定位元素 form>span>input:nth-child(2)
xpath定位
(1)绝对路径定位:/html/body/div[1]
(2)相对路径定位://
- 相对路径+索引 //form/div[1]/div[1]/input
- 相对路径+属性 //input[@id="username"]
- 相对路径+通配符 //*[@*="username"]
- 相对路径+文本 //h3[text()=""登录]
xpath定位元素的效率没有css选择器定位元素的效率高
4. 操作测试对象
webdriver中比较常用的操作对象的方法有下面几个:
- click点击对象
- send_keys 在对象上模拟按键输入
- clear 清除对象输入的文本内容
- submit 提交
- text 用于获取元素的文本信息
private static void test() throws InterruptedException{//创建一个浏览器驱动WebDriver webdriver=new ChromDriver();//打开百度首页webDriver.get("https://ww.baidu .com");//输入“软件测试”webDriver.findElement(By.cssSelector("#kw")).sendKeys("冲刺班");//清除输入信息(“软件测试”)webDriver.findElement(By.cssselector("#kw")).clear();//获取输入框输入信息String result_string=webDriver.findElement(By.cssselector("#kw")).getText();//若输入信息为空if(result_string.equals("")){//测试通过System.out.println("测试通过");}else{//反之不通过System.out.println("测试不通过");}sleep(1000);webDriver.quit();
}
submit和click之间的区别
- submit操作元素必须放在form标签下
- click对标签没有要求
5. 添加等待
(1)强制等待 sleep(5000); //休眠5秒
(2)智能等待 找到元素之后就会进行退出,此处的时间是最大等待时长
webDriver.manage().timeouts().implictlyWait(Duration.ofSeconds(10)); //等待10秒
6. 打印信息
7. 浏览器操作
(1)浏览器最大化
private static void test08() throws InterruptedException{webDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/L");sleep(millis:3000);webDriver.manage().window().maximize();webDriver.manage().window().fullscreen();sleep(millis:3000);webDriver.quit();
}
(2)浏览器滚动
- #浏览器的前进 browser.forward()
- #浏览器的后退 browser.back()
- # 将浏览器滚动条滑到最顶端 document.documentElement.scrollTop=0
- #将浏览器滚动条滑到最底端 document.documentElement.scrollTop=10000示例 js="var q=document.documentElement.scrollTop=10000" driver.execute_script(js) execute_script(script, *args) ,在当前窗口 / 框架同步执行 javaScript
8. 键盘事件
9. 鼠标事件9