UI自动化测试介绍

1.什么是自动化测试

由程序代替人工进行系统校验的过程

1.1自动化测试能解决什么

  • 回归测试(冒烟测试)

针对之前老的功能进行测试  (通过自动化的代码来实现)

针对上一个版本的问题的回归

  • 兼容性测试

web实例化不同的浏览器驱动相当于于对不同的浏览器进行操作,从而解决浏览器的兼容性测试问题

  • 性能测试

通过一些工具模拟多个用户实现并发操作

  • 提高工作效率,保障品质质量

1.2自动化测试的优点

  • 自动化测试能在较短的时间内执行更多的测试用例
  • 自动化测试能减少人为的错误‘
  • 自动化测试能克服手工的局限性
  • 可以重复执行

1.3自动化测试的误区

可以完全代替手动测试

一定比手工测试厉害

可以发现更多的BUG

适用于所有的功能

1.4自动化测试分类

  • web自动化测试
  • 移动app自动化
  • 接口自动化
  • 单元测试-自动化测试
  • 安全测试(渗透测试)
  • 桌面应用自动化测试
  • 嵌入式设备自动化测试

2 什么是UI自动化测试

UI通过对web应用以及app应用进行自动化测试的过程

2.1 什么项目适合做UI自动化测试

  • 需求变动不频繁
  • 项目周期长
  • 项目需要回归测试

2.2 UI自动化测试在什么阶段开始

手工测试完成之后才能做自动化测试(通过手动测试能清楚的知道自动化测试的步骤以及结果)

2.3UI自动化测试所属分类

  • 黑河测试(功能测试) ------UI自动化测试

  • 白盒测试(单元测试)

  • 灰盒测试(接口测试)

1、V1     通过手工测试完成之后,有十个功能。   

2、 针对V1版本的十个功能,进行自动化的代码编写

3、V2  增加了十个功能(总共有20个功能), v2版本的测试过程当,新增的10个功能手工测试。针对老的10个功能就可以通过自动化来进行回归测试。

 


二、web自动化测试基础

1. web自动化框架

1.1 主流的web自动化工具

  • QTP 由惠普公司开发的一款自动化工具,支持web、桌面的自动化测试。 收费的商用工具。
  • selenium 主要用来做web自动化测试的,开源的免费的工具。
  • root framework 自动化测试平台。通过它可以实现web自动化测试、接口自动化测试、桌面的自动化测试。

1.2 selenium特点

selenium中文名是硒,就是用来做web自动化测试的

  • 开源软件: 源代码开放,但是不一定免费

  • 跨平台: 平台指操作系统。 linux、windows、 mac操作系统

  • 支持多种浏览器:firefox、chrome、 ie、edge、opera、safari

  • 支持多语言:python\java\C#\js\Ruby\PHP

  • 成熟稳定功能强大:被大公司使用。google、华为、百度、腾讯

    后续大家在选择自动化工具的时,这几个特点就是选择工具的依据。

1.3 selenium发展史

selenium 1.0

  • selenium IDE

    • 是firefox的一款插件,通过它可以记录用户的操作并生成对应的自动化脚本。

  • selenium grid 通过grid可以将脚本下发到不同的电脑在不同的浏览器上面执行。

 

selenium RC

由JS封装的一个工具,用来对浏览器进行操作的。

  • selenium 2.0

    • selenium 1.0 + webdriver

    • 针对浏览器的操作都是通过webdriver来实现的。

    • 支持的语言更多

  • selenium 3.0

    • 删除了selenium RC

    • 全面支持java8

    • 支持macOS,支持safari浏览器

    • 支持微软最新的EDGE浏览器,支持更多的浏览器

 

如何确认selenium安装完成:可以通过pip show selenium进行查看

 

3. 元素定位

  • id定位
  • name定位
  • class_name定位
  • tag_name定位
  • link_text定位
  • partail_link_text定位
  • xpath定位
  • css定位

3.1 ID定位

  • 通过元素的ID属性值来进行元素定位  ,在html标准规范中 ID值是唯一的

    说明: 元素要有ID属性

  • 定位方法: find_element_by_id(id) # id参数表示的是id的属性值

# 通过ID定位到用户名输入框并在用户名输入框中输入admin
driver.find_element_by_id("userA").send_keys("admin")
# 通过ID定位到密码输入框并在密码输入框中输入123456
driver.find_element_by_id("passwordA").send_keys("123456")

3.2 name定位

  • 通过元素的name属性值为进行元素定位 name属性值 在HTML页面中,是可以重复的。

    说明:元素要有name属性

  • 定位方法: find_element_by_name(name) # name 参数表示的是name的属性值
# 通过name定位用户名,输入admin
driver.find_element_by_name("userA").send_keys("admin")
# 通过name定位密码, 输入123456
driver.find_element_by_name("passwordA").send_keys("123456")

3.3 class_name定位

  • 通过元素的class属性值进行元素定位 class属性值是可重复的

    说明:元素必须要有class属性

  • 定位方法: find_element_by_class_name(class_name) # class_name参数表示的是class的其中一个属性值
# 1).通过class_name定位电话号码A,并输入:18611111111
driver.find_element_by_class_name("telA").send_keys("18611111111")
# 2).通过class_name定位电子邮箱A,并输入:123@qq.com
driver.find_element_by_class_name("dzyxA").send_keys("123@qq.com")

3.4 tag_name定位

  • 通过元素的标签名称进行定位,   在同一个html页面当中,相同标签元素会有很多。

    这种定位元素的方式不建议大家在工作当中使用。

  • 定位方法: find_element_by_tag_name(tag_name) # tag_name表示的是元素的标签名称。

    如果有重复的元素,定位到的元素默认都是第一个元素

3.5 link_text定位

  • 通过超链接的全部文本信息进行元素定位 ,主要用来定位a标签
  • 定位方法: find_element_by_link_text(link_text) # link_text参数代表的是a标签的全部文本内容。
# 通过linu_text定位到新浪网站并点击
# driver.find_element_by_link_text("新浪").click()
driver.find_element_by_link_text("访问 新浪 网站").click()

3.6 partial_link_text定位

  • 通过超链接的局部文本信息进行元素定位,主要用来定位a标签
  • 定位方法:find_element_by_partial_link_text(partial_link_text) # partial_link_text表示的是a标签 的局部文本内容
# 通过partial_link_text定位到新浪网站并点击
driver.find_element_by_partial_link_text("访问 新浪 网站").click()

3.7 定位一组元素

  • 定位一组元素的方法:

    find_elements_by_id(id)    

    find_elements_by_tag_name(tag_name)

  • 定位一组元素返回的值是一个列表

可以通过下标来使用列表中的元素

# 使用tag_name定位密码输入框(第二个input标签),并输入:123456
elements = driver.find_elements_by_tag_name("input")
elements[2].send_keys("123456")

3.8 xpath定位

定位方法: find_element_by_xpath(xpath) # xpath表达式

按Ctrl+F 可以在搜索框对xpath和css表达式进行校验

  • 路径定位

绝对路径 表达式是以 /html开头,元素的层级之间是以 / 分隔

相同层级的元素可以使用下标,下标是从1开始.

需要列出元素所经过的所有层级元素 , 工作当中, 一般不使用绝对路径

例:/html/body/div/fieldset/form/p[1]/input

 

相对路径   匹配任意层级的元素,  是以  //tag_name或者//* 开头

也可以使用下标,下标是从1开始。

例子://p[5]/button

# 通过xpath的绝对路径定位用户名输入框并输入admin
driver.find_element_by_xpath("/html/body/div/fieldset/form/p/input").send_keys("admin")
# 等待3S
time.sleep(3)
# 通过xapth的相对路径定位密码输入框并输入123
driver.find_element_by_xpath("//form/p[2]/input").send_keys("123")
  • 属性定位

//*或者//tag_name //*[@attribute='value'] # attribute表示的是元素的属性名,value表示的是元素对应属性值

如果使用class的属性进行元素定位,需要用到class里面所有的值

# 利用元素的属性信息精确定位用户名输入框,并输入:admin
driver.find_element_by_xpath("//*[@placeholder='请输入用户名']").send_keys("admin")
  • 属性与逻辑结合

//* 或者//tag_name 开头 //*[@attribute1='value1' and @attribute2='value2']

# 使用属性与逻辑结合定位策略,在test1对应的输入框里输入:admin
driver.find_element_by_xpath("//input[@name='user' and @class='login']").send_keys("admin")
  • 属性与层级结合

是以//*或者//tag_name开头 //p[@id='pa']/input

在任意层给当中,都可以结合属性来使用

# 使用层级与属性结合定位策略,在test1对应的输入框里输入:admin
driver.find_element_by_xpath("//p[@id='p1']/input").send_keys("admin")

3.9 css定位

CSS定位元素的方法: find_element_by_css_selector(css_selector) # css_selector表示的是CSS选择器表达式

  • id选择器

表达式: #id # 表示通过元素的ID属性进行元素选择 id 表示的的id属性的属性值

  • class选择器

表达式: .class  .表示通过元素的class属性进行元素选择, class表示的class属性的其中一个属性值

# 通过css的id选择器定位用户名输入框,输入admin
driver.find_element_by_css_selector("#userA").send_keys("admin")
# 通过css的class选择器定位电子邮箱输入框,输入123@qq.com
driver.find_element_by_css_selector(".emailA").send_keys("123@qq.com")
  • 元素选择器

就是通过元素标签名称来选择元素 。表达式: tag_name 不推荐使用

  • 属性选择器

就是通过元素的属性来选择元素。 表达式:[attribute='value'] #attribute 表示的是属性名称,value表示的是属性值

如果使用的是class属性,需要带上class的全部属性值

# 通过css的元素选择器定位用户名输入框,输入admin
driver.find_element_by_css_selector("input").send_keys("admin")
# 通过css的属性选择器定位电子邮箱输入框,输入123@qq.com
driver.find_element_by_css_selector("[class='emailA dzyxA']").send_keys("123@qq.com")
  • 层级选择器
  • 父子层级关系选择 器

    • 表达式: element1>element2 通过element1来找element2,并且element2是element1的直接子元素

  • 隔代层级关系选择器

  • 表达式: element1 element2 通过element1来找element2,并且element2是element1的后代元素

    # 通过css的层级选择器定位用户名输入框输入admin
    driver.find_element_by_css_selector(".zc #userA").send_keys("admin")

     

CSS扩展

  • input[type^='value'] input表示标签名称,type表示属性名称, value表示的文本内容

    查找元素type属性值是以value开头的元素

  • input[type$='value'] input表示标签名称,type表示属性名称, value表示的文本内容

    查找元素type属性值以value结尾的元素

  • input[type*='value'] input表示标签名称,type表示属性名称, value表示的文本内容

    查找元素type属性值包含value的元素

4. 元素操作及浏览器操作方法

1. 元素操作

  • 点击操作   element.click()
  • 输入操作   element.send_keys('xxx')
  • 清楚操作   element.clear()
driver = webdriver.Chrome()
driver.get("file://D:/BaiduNetdiskDownload/02讲义 笔记 软件/09、UI自动化测试及黑马头条项目实战/UI自动化/UI自动化/web自动化工具集合/pagetest/注册A.html")
driver.find_element(By.ID, 'userA').send_keys("userA")
driver.find_element(By.ID, 'passwordA').send_keys('password')
driver.find_element(By.CSS_SELECTOR, '.telA').send_keys('10086')
driver.find_element(By.XPATH, "//*[@name='emailA']").send_keys("123@qq.com")
# 修改电话号码
time.sleep(3)
driver.find_element(By.ID, 'userA').clear()
driver.find_element(By.ID, 'userA').send_keys("186000000")
time.sleep(3)
driver.quit()

2.浏览器操作

1. maximize_window() 最大化浏览器窗口 --> 模拟浏览器最大化按钮</font>  实例化浏览器驱动之后,就可以调用窗口最大化的方法

2. set_window_size(width, height) 设置浏览器窗口大小 --> 设置浏览器宽、高(像素点)

3. set_window_position(x, y) 设置浏览器窗口位置 --> 设置浏览器位置

   x,y是一个坐标点,通过此坐标点确定浏览器最左上角的位置,以此确定浏览器在屏幕上的位置。

   x, y不能超过屏幕的分辨率大小

4. back() 后退 --> 模拟浏览器后退按钮

5. forward() 前进 --> 模拟浏览器前进按钮

6. refresh() 刷新 --> 模拟浏览器F5刷新

7. close() 关闭当前窗口 --> 模拟点击浏览器关闭按钮

8. quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口

10. title 获取页面title

11. current_url 获取当前页面URL

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值