UI自动化和selenium相关以及八大定位
一、UI自动化相关
1. UI自动化的本质(重点)
定位元素→操作元素→模拟页面操作→断言→测试报告
2. 适合UI自动化的场景
UI自动化的前提条件
(1)需求不能频繁变动
(2)UI稳定(UI自动化就是基于UI层面的,UI界面总变化无法开展)
(3)项目周期长(UI自动化脚本编写和调试耗时,项目周期短纯手工更高效)
(4)回归测试频繁(回归测试多就会有不断的主流程功能需要回归,自动化更高效)
适用场景
(1)冒烟测试
(2)主功能回归测试
3. UI自动化的原则
(1)一个case完成一个功能测试(直接从功能测试用例里摘出可以自动化的进行标记)
(2)一个脚本是一个完整的业务场景
(3)每个脚本可以独立运行,没有依赖关系
(4)设计合适的检查点
(5)设计良好的框架
4. UI自动化的覆盖率
覆盖率是根据具体项目来说的,并不是说占比越高就越好,会收到项目周期,迭代次数等影响;
5. UI自动化用例从哪里来:手工测试用例中摘出可以自动化的
二、Selenium相关
1. selenium优点(重点)
(1)开源,免费
(2)支持多浏览器:firefox,Chrome(常用前两个),Opera,IE,Edge,Safari
(3)支持多平台:Windows,Linux,MAC
(4)支持多语言:Python,Java,C#,C++,JavaScript
(5)对web支持良好
(6)简单(API简单),灵活(开发语言进行驱动)
(7)支持分布式测试用例执行
2. Selenium的发展(了解即可)
(1)selenium1.0:2004年,Jason Huggins研发Selenium项目,2006年加入了Selenium RC(Remote Control)是Selenium家族的核心部分。
(2)Selenium2.0:2011年,因为Selenium和Webdriver的合并,Selenium 2.0由此诞生。简单用公式表示为:Selenium 2.0 = Selenium 1.0 + WebDriver;在Selenium 2.0中主推的是WebDriver,可以将其看作Selenium RC的替代品。因为Selenium为了保持向下的兼容性,所以在Selenium 2.0中并没有彻底地抛弃Selenium RC。
(3)Selenium3.0:2016年,selenium3.0出生
——去掉了RC,简单用公式表示为:Selenium 3.0 = Selenium 2.0 - Selenium RC(Remote Control)
——Selenium3.0只支持Java8版本以上。
——Selenium3.0中的Firefox浏览器驱动独立了,以前装完selenium2就可以驱动Firefox浏览器了,现在和Chrome一样,必须下载和设置浏览器驱动。
——支持的浏览器更多了。
RC和webdriver区别:RC是通过脚本→selenium server→浏览器→web应用
Webdriver是直接脚本→浏览器→web应用,速度更快;
3. Selenium环境搭建的一般问题:浏览器需要装对应版本的driver驱动,启动不了或者是报版本错误,一般就是下载的driver版本不对应。
三、Selenium常用API
1.八大定位方式
from selenium import webdriver driver=webdriver.Chrome() #以下方式均可以find_elements driver.find_element_by_id("**")#id值定位,唯一 driver.find_element_by_name("**")#name属性,不唯一 driver.find_elements_by_class_name("**")#类名定位,class的属性值 driver.find_element_by_tag_name("**")#标签名定位,定位到第一个标签 driver.find_element_by_link_text("**")#链接文本定位,必须有链接和可跳转的文字 driver.find_element_by_partial_link_text("**")#部分链接文本定位 driver.find_element_by_xpath("**")#xpath路径表达式 driver.find_element_by_css_selector("**")#css选择器定位
重点说明:
1.复合类(class=“类名1 类名2”)即class包含超过2,不要用class_name定位,会报错
2.link_text文字可以点击跳转就可以用这个方式定位,也就是包含href属性
3.partial_ink_text传的内容必须是唯一的,否则页面定位到的元素太多
4.tag_name用标签名定位,一般不使用,同名太多