Web自动化测试

学习路线

序号阶段知识点
第一阶段自动化入门1.认识自动化及自动化测试
2.自动化测试工具(框架)选择
3.SelemiunIDE插件的使用
4.Firebig插件工具及使用
web自动化工具(webDriver)基础篇1.元素基础定为
2.Xpath、CSS元素定为方式
3.元素操作
4.浏览器的操作方法
Web自动化工具(webDriver)中级篇1.鼠标操作
2.键盘操作
3.元素等待
4. HTML特殊元素处理
5.窗口截图
Web自动化(高级篇)1.自动化测试模型
2.UnitTest框架
3.UnitTest断言
4.生成HTML测试报告
5.自动测试报告自动发送邮件

自动化测试简述

概念
由机器设备代替认为自动完成制定目标的过程

优点

减少人工劳动力
工作效率调高
产品规格统一标准
规模化(批量生产)

概念
让程序代替人为取验证程序功能的过程

为何进行自动化测试

  1. 解决-回归测试:项目在法新版本之后对项目之前的功能进行验证
  2. 解决-压力测试:可以裂解多用户同时去操作软件,软件服务器处理多用户请求的能力
  3. 解决-兼容性测试:不同浏览器(IE、Firefox、Chrome)
  4. 提高测试效率,保证产品质量

测试在什么阶段开始
功能测试完毕(采用手工测试:就是由人一个一个输入用例,让后观察结果)

自动化测试所属分类

1.√黑盒测试(功能测试)
2.灰盒测试(接口测试)
3.白 盒测试(单元测试)

  • web自动化测试属于黑盒测试(功能测试)

自动化测试优点

  1. 较少的时间内运行更多的测试用例
  2. 自动化脚本可重复运行
  3. 减少人为的错误
  4. 测试数据存储

自动化测试缺点

  1. 不能取代代手工测试
  2. 手工测试比自动化发现的缺陷更多的
  3. 测试人员技能要求

自动化测试分类

  1. Web-(UI)自动化测试(本阶段学习)
  2. 接口-自动化测试
  3. 移动(app)-自动化测试
  4. 单元测试-自动化测试

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

  1. 需求变动不频繁
  2. 项目周期长
  3. 项目需要回归测试

Web自动化测试的主流测试工具

  1. QTP(收费)
        QTP是商业的功能测试工具,收费、支持web,桌面自动化测试
  2. Seleniumm(开源)
       Selenium是开园的web自动测试工具,免费,主要做功能测试。
  3. Jmeter(开源、Web、接口、性能)
       Jmeter是由Apache公司使用Java平台开发的一款测试工具,支持(Web、接口测试、性能测试)
        * Web测试在通信层(无UI界面)
  4. Loadrunner(收费、web、性能)
       Loadrunner是商业性能测试工具,收费,功能强大,适合做复杂场景的性能测试
  5. Robot framework
        <Robot Framework是一个基于python可扩展地(关键字驱动)的测试自动化框架

对此,进行了总结:

测试种类App端自动化测试
Web自动化测试selenium、robot framework
App端自动化测试Appium、Monkeyrunner、UIautomation
PC客户端(Win32)QTP
接口自动化测试Jmeter、Postman、httpUnit、RestClient(后三者为开发常用的浏览器插件)
云测平台Testin Testbird
性能测试Jmeter、LoadRunner

*加粗字体为会学习到的部分

在这里插入图片描述

Selenium

Selenium是一个用于web应用程序测试的工具,中文——硒

Selemiun特点

  1. 开源软件:源代码开放可以根据需求来增加工具的某些功能
  2. 跨平台:linux、windows、mac(使用python解释器跨平台)
  3. 核心功能:可以在多个浏览器上进行自动化测试
  4. 多语言:Java、Python、C#、JavaScript、Ruby等
  5. 成熟稳定:目前已经被geogle、百度、腾讯等公司广泛使用
  6. 功能强大:能够实现类似以商业工具的大部分功能,因为开元行,可实现定制化的功能

Selenium家族发展史(了解)

selenium2.0被广泛使用
在这里插入图片描述

在这里插入图片描述
Selenium IDE:火狐插件、可录制脚本
selenium Grid:测试量大时使用,分布式
selenium RC:JS脚本注入到浏览器来模拟浏览器,有缺陷

同源策略:安全协议保护,不在同一源内禁止访问

Sleniume2.0(WebDriver)
WebDriver:通过浏览器驱动程序控制(模拟)浏览器,将控制浏览器的方法到分装到库,简称Api



Selenium IDE

是一个Firefox插件,用于记录和播放用户与浏览器的交互。(即录制web操作脚本)

为何使用Selenium IDE
1.Swlenium IDE录制脚本,并转换为代码语言,设计脚本时可用此作为参考

安装相关方法:
1.官网安装V而ISOin:2.9.1.1
通过官网安装插件:Selenium IDE for 火狐(链接已经失效)

2.附加组件管理器
  (1)火狐浏览器 v24-v25
  (2) 附加组件管理器(Ctrl+Shift+A)→搜索Selenium IDE
     提示:
        1. IDE前面有个空格
        2. 附加组件管理器启动方式

3.离线安装
下载:
安装:下载好 selenium_ide-2.9.1-fx.xpi 直接拖入浏览器安装

环境搭建
对于mp3:-播放器(建地基

对于python环境:工具箱(print函数封装)、编译器

Selenium IDE运行

  1. Ctrl+Alt+S(试过无效)
  2. 工具栏→Selenium IDE
    在这里插入图片描述

在这里插入图片描述
录制自动化脚本
需求1:使用Selemiun IDE插件入职→打开百度搜索引擎,搜索(淘宝网)再返回搜索结果返回连接
界面和老版本有很多不同,保存测试用例

id-kw;#为百度搜索文本框id属性和值
id=su;#为百度一下按钮id属性和值

在这里插入图片描述
将录制的脚本转换为代码语言

新版本已经不支持,老版本(如2.9.0可以导出为其他语言)

录制脚本时是录制鼠标的所有在浏览器的操作,脚本中会有多余步骤,又是需要手动填写或修改脚本,所以需要对IDE脚本编辑与操作有所了解

基于Selenium IDE脚本编辑与操作(了解)
编辑行命令:目的:手动修改或编写脚本(采用录制方式很容易记录出多余的操作)
编辑-行命令:Table标签下选中某一行命令,命令由command、Target、value三部分组成
插入命令:在某一条命令上右击,选择“insert new command”命令,插入空白再进行编辑
插入注释:右击选择“insert new commnet”命令插入注解空白行,本行内容不执行,插入内容以//开头
除此之外还有移动命令、删除命令、命令执行

Selenium IDE常用命令(了解)
Command输入-Target

  1. open(url)命令
      作用:打开指定的URL,URL可以为先对或是绝对URL
      Target:要打开的URL,Value值为空
        (1)当Target为空,将打开的Base URL中填写的页面
        (2)当Target不为空且值为相对路径,将打开Base URL+Target页面,如假设Base URL为http://www…zhi97.com,而Target为/about.aspx,则执行open命令时,将打开http://zhi97.com/aspx
         (3) 当Target以http://开头时,将自动忽略Base URL,直接打开target的网址

  2. pause(waitTime)
      作用:暂停脚本运行
      waitTime:等待时间,单位ms;//Target-1000

  3. goBack()
      作用:模拟单击浏览器的后退按钮

 &emsp提示:由于没有参数,所以Target和Value可不填

  • 必须是同一个窗口打开2个以上url才生效
  1. refresh()
       作用:刷新当前页
      提示:由于没有参数,所以Target和Value可不填

  2. click(locator)
      单击一个链接、按钮、复选框或单选按钮,如果该单击事件导致新的页面嘉爱,命令会加上后缀AndWait“,即clickAnd wait”,或“waitForPageToLoad”命令

  3. type(locator,value)
      作用:向指定输入域中输入指定值,也可谓下拉框、复选框 和单选框赋值
      Target:元素的定为表达式
      Value:要输入的值

  4. close()
      作用:模拟用户单击窗口上的关闭按钮
      提示:由于没有参数,所以Target和Value可不填

定位调试插件

快速查找一个元素标签的属性和值

Firebug
   Firefox的一款插件,可以调试所有网站语言,同时也可以快速定为HTML页面中的元素
   作用:定位元素(获取元素定位和查看元素属性)

但是新版的火狐浏览器中已经没有该插件,统一整合到了开发者工具中(调试器)
在这里插入图片描述
(需求2 实现天涯论坛自动登陆个人账号)

WebDriver:测试Web项目自动化测试工具

掌握webDriver元素定位元素操作方法

因为已经进行了融合,一般说的是WebDriver即为Selenium 2.0
搭建环境:工具包、解释器

  1. Webdriver(Selenium2)是一种用于Web应用程序的自动测试工具
  2. 它提供了一套友好的API
  3. Webdriver完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动
    说明:
    API:应用编程接口说明(Webdriver类库内封装非常多的防范,要使用这些方法,就需要友好的调用命名规则)

WebDriver API
支持的浏览器
1.Firefox(FirefoxDriver)【推荐-本阶段学习使用】
2. IE(InternetExplorerDriver)
3. Opera(OperaDriver)
4. Chorme(ChormeDriver)
5. safari(SafriDriver)
6. Htmlunit(HtmlUnit Driver)
提示:
Fireworks、Chorme:对元素定为和操作有良好的智齿,同时对Javascript支持也非常好。
IE:只能在windows平台运行,所有浏览器中运行速度最慢
HtmlUnit:无GUI(界面)运行,运行速度最快

推荐火狐原因:Selenium IDE、Firebug、对WebDriver API支持良好

支持的开发语言
JAva、Python、PHP、JAvaScript、Perl、Ruby、C#

安装python中的selenium包

浏览器版本需和驱动一致,驱动下载后需要添加Path环境变量中没说这直接放在python安装目录(因为python已添加至path中)

使用火狐浏览器:FireFox 48以上版本 selenium 3.x+FireFox驱动-geckodriver;FireFox 48以下版本 , selenium 2.x内置驱动
IE浏览器:IE9以上版本 selenium 3.x;IE9以下版本 selenium 2.x
Chorme:selenium2.x/3.x+chorme驱动

WebDriver-元素定位

让程序操作指定元素,就必须先找到该元素,程序不如人眼
目标:
了解元素各种定位方法
掌握id、name、class_name、tag_name、link_text、paralal_link_text定位的使用(webDriver提供8种定位方式)

定位方式含义备注
id一般做不重复、唯一的识别元素的id属性定位
name可重名元素的name 属性定位
class_name一个物体可以属于多个类,找其中一个即可类属性值为元素 class 属性 定位
tag_name通过标签名称(如a、input)元素标签名在当前页面必须为唯一元素,或定位符合条件的第一个元素
基于元素的标签名称
link_text链接文本,指定位超链接 < a> 定位
partial_link_text含相关关键字,模糊匹配超链接 < a > 定位
xpath为元素路径定位为元素路径定位
Css选择定位器为CSS选择器定位

案例1-注册界面
1.语言使用paython
2.开发工具使用pycharm、使用seleniumxxx

id定位
#定位方法:
find_element_by_id(id)

说明:HTML规定id属性在整个GTML文档中必须是唯一的,id定位就是通过元素的id属性来定位元素
前提:元素有id属性

实现案例1需求
(1)打开注册A、html页面,使用id定位、自动填写(账号A:admin、密码A:123456)
(2)填写完毕后,3s关闭浏览器窗口

url——\是转义字符,所以用\(html文档在本地)
或r“E:\pro\EGG\df

步骤分析:

from selenium import webdriver               #1.导入selenium包
from time import sleep                       #2.导入time包
driver=webdriver.Firefox()                   #3.实例化火狐浏览器
driver.get("https://login.taobao.com/member/login.jhtml?spm=a21bo.21814703.201864-2.d1.5af911d9g3Qo9j&f=top&redirectURL=http%3A%2F%2Fwww.taobao.com%2F")                              #4.打开网页注册页面
element=driver.find_element_by_id("fm-login-id")                #5.使用id定位方法(具体值可以在控制台查看)
element.send_keys("喵喵")                           #6.使用send_keys()方法
pwd=driver.find_element_by_id("fm-login-password")
pwd.send_keys("123456")
sleep(3)                                     #7.暂停3s
quit()                                       #8.关闭浏览器

总结
在这里插入图片描述

name定位
#定位方法:
find_element_by_name(name值)

说明:HTML规定name属性来指定元素名称,因此它的作用更像人名,name的属性值在当前文档中可以不是唯一的,name定位就是根据元素name属性来定位。

前提:元素有name属性

实现案例1需求
(1)打开注册A、html页面,使用id定位、自动填写(账号A:admin、密码A:123456)
(2)填写完毕后,3s关闭浏览器窗口

#导包
from selenium import webdriver

from time import sleep
#实例化
driver=webdriver.Firefox()
#目标网站
driver.get("https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.201864-2.d1.5af911d9a0HjXd&f=top&redirectURL=http%3A%2F%2Fwww.taobao.com%2F")
#定位用户/密码及操作
driver.find_element_by_name("fm-login-id").send_keys("admin")
driver.find_element_by_name("fm-login-password").send_keys("admin")
sleep(2)
driver.quit(  )
Class定位
#方法
find_element_by_class_name()

说明:GTML规定了class来指定元素的类名,用法和name、id类似
前提:元素有class属性

用例:按照class定位在百度中输入 相应文字

from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("https://www.baidu.com/index.php?tn=monline_3_dg")
driver.find_element_by_class_name("s_ipt").send_keys("如何学习python")
tag_name定位?
#方法
find_element_by_tag_name(标签名称)     #返回符合条件的第一个标签
                               #如何获取第二个元素?稍后

说明:HTML本质上是由不同的tag(标签)组成,而每个tag都是指同一类,所以tag定位效率低,一般不建议使用,tag_name定位就是通过标签名来定位

# tag属性
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("https://www.baidu.com/index.php?tn=monline_3_dg")
driver.find_element_by_tag_name("input").send_keys("如何学习python")
# sleep(3)
link_text定位
#方法
find_elemenet_by_link_text(全部文本值)

说明:link_text定位与前面4个定位有所不同,它专门用来定位超链接文本(< a > 标签 </ a>),需要传入a标签的全部文本

eg.打开一个网页

# tag属性
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("C:\\Users\\71891\\Desktop\\new.html")
#使用link
driver.find_element_by_link_text("访问").click()
"""
传入需要定位的元素,全部文本
click()为单击方法,稍后会做介绍
"""
partial_link_text定位
#方法
find_element_by_partial_link_text(局部文本值)

说明:需要传入a标签局部文本-能表达唯一性(访问新浪网站)
eg.利用a标签打开超链接进行访问并关闭(可以自己在本地写一个标签)

from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("C:\\Users\\71891\\Desktop\\new.html")
driver.find_element_by_partial_link_text("访问").click()
sleep(3)
driver.quit()
find_element[s]_by_xxx()

elements:返回所有符合条件的元素

作用:找到定位所有符合条件的元素,且返回定为元素格式数组(列表)格式
说明:返回的格式为列表,所以访问的时候必须指定下标,下标从0开始

eg.本地网页,id=“A”的属性有两个,选择第二进行链接

from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("C:\\Users\\71891\\Desktop\\new.html")
#使用link
driver.find_elements_by_id("A")[1].click()

在实际项目中标签没有iname\class属性如何行为?
id\name\class属性为动态获取,随着舒心或加在而变化如何定位?为此出现了xpath和css

xpath

Xpath是非常灵活的定位策略

driver.find_elment_by_xpath()
  1. Xpath即为XML Path的简称,它是一种用来确定XML文档中某部分位置的语言
  2. HTML可以看多这是XML的一种实现,所以seleniumm用户可以使用该语言在web应用中定位元素
    XML:一种标记语言,用于数据的存储和传递。后缀.xml结尾

Xpath定位策略(方式)

  1. 路径-定位
    &embp;&embp;绝对路径
    &embp;&embp;相对路径
  2. 利用元素属性-定位
  3. 层级与属性结合-定位
  4. 属性与逻辑结合-定位
路径(绝对路径、相对路径)

绝对路径:从最外层元素到指定元素之间所有经过元素层级路径,如:/html/body/div/p[2]
提示:
(1)绝对路径 以 / 开始
(2)使用Firebug可以快速生成元素Xpath绝对路径

/html/body//div//div//form#绝对另中间不能跳跃,以层级逐级向下

相对路径:从第一个符合条件的元素开始(一般配合属性来区分),如

 //input[@id="userA"]    #注意,于直接属性查找应该有区别

直接输入绝对路径过于繁复,所以在Firefox中可以先定位再直接复制:
在这里插入图片描述
eg.打开某网页并输入用户名密码(采用以上方法用xpath定位)

from time import sleep
from selenium import webdriver
driver=webdriver.Firefox()
url="http://rzfw.njupt.edu.cn/cas/login?service=http%3A%2F%2F202.119.226.237%2F"
driver.get(url)
#绝对路径定位
driver.find_element_by_xpath("//*[@id='username']").send_keys("haha")
driver.find_element_by_xpath("//*[@id='ppassword']").send_keys("123456")             #注意单引号中不能继续嵌套单引号/采用双引号

sleep(2)
driver.quit()
层级与属性结合

层级:父子标签
?说明:需要找的元素没有属性,但是它的父级有

示例:
//*[@id='p1A']/input
属性与逻辑结合

两个以上属性时使用,以and连接,属性前需加@

//input[@class="form-control user-input" and @id="username"]
Xpath-延伸
//*[text()="xxx"]                                          #文本内容是xxx的元素,用关键文字定位

//*[start-with(attribute,‘xxx’)]                      #属性为xxx开头的元素,只能从从第一个字母开始

//*[contains(@attribute,'Haxx')]                 #属性中含有xxx的元素,已知的内容必须连续
CSS

定义:
CSS(Cascading Style Sheets)是一种语言,它用来描述HTML和XML的元素显示样式
  (格式HTML语言中

在CSS语言中有CSS选择器(不同的策略选择元素),在Selenium中也可以使用这种选择器

使用:

  1. 在selenium中激励推荐使用CSS定位,定位速度较比Xpath快
  2. CSS选择器语法很强大,测试中仅使用常用的几个

CSS定位常用策略(方式):
1.id选择器:基于id元素唯一xx
2.class选择器:多个class可以找到
3.元素选择器
4.属性选择器
5.层级选择器

CSS定位方法:

driver.find_element_by_css_selector()

id选择器:

driver.find_element_by_css_selector("#xxx")   #xxx为具体id的值

说明:根据元素id属性来选择
格式:#id 如:#userA <选择id属性值为userA的所有元素>

eg.通过id定位,输入数据并点击

from time import sleep
from selenium import webdriver
driver=webdriver.Firefox()
url="https://www.baidu.com/index.php?tn=monline_3_dg"
driver.get(url)
#绝对路径定位
driver.find_element_by_css_selector("#kw").send_keys("拜登")
driver.find_element_by_css_selector("#su").click()
sleep(3)
driver.quit()

class选择器:

driver.find_element_by_css_selector(".xxx")   #xxx为具体类的值

说明:根据元素class属性来选择
格式:.class 如:.telA <选择class属性值为telA的所有元素>

from selenium import webdriver
driver=webdriver.Firefox()
url="https://www.baidu.com/index.php?tn=monline_3_dg"
driver.get(url)
#绝对路径定位
driver.find_element_by_css_selector(".s_ipt").send_keys("量子通信")
driver.find_element_by_css_selector(".s_btn").click()

元素选择器:
仅控制台输入?

[id="kw"] 

说明:根据元素的标签名来选择
格式:element 如:input <选择所有input元素>

属性选择器:

driver.find_element_by_css_selector("[xx='yyy']")             #xx为属性mingcheng,"yyy"为属性值
driver.find_element_by_css_selector("input[xx='yyy']")             #xx为属性mingcheng,"yyy"为属性值

说明:根据元素的属性名和值来选择
格式:[attribute=value] 如:[type=“password”]<选择所有type属性值为password的值>

eg.通过属性的定位得到

from time import sleep
from selenium import webdriver
driver=webdriver.Firefox()
url="https://www.baidu.com/index.php?tn=monline_3_dg"
driver.get(url)
#绝对路径定位
driver.find_element_by_css_selector("[name='wd']").send_keys(量子通信)
#driver.find_element_by_css_selector("input[id='kw']").send_keys("量子通信")

层级选择器:
说明:根据元素的父子关系来选择
格式:element>ekement 如:p>input <返回所有p元素下所有的input元素>
提示:>可以用空格代替 如:p input 或者 p [type=“password”]

eg.

p>input[type="text"]      #控制台中操作
#p input[type="text"] 
CSS延伸
  1. input [type^=“p”] 说明type属性是以字母开头的元素
  2. input [type$=“d”] 说明type属性是以字母结束的元素
  3. input [type*=“w”] 说明type属性是包含w字母的元素

eg.控制台内

[class*="-pass-"]

对于 XPath与CSS类型而言,功能对比:

定位方式XPathCSS
元素名//inputinput
id//input[@id=‘UserA’]#userA
class//*[@class=‘telA’].telA
属性1.//xxx[text()=“xxx”]
2.//[start-with(@attribute,‘xxx’)
3.//[contains(@attribute,‘xxx’)]]
1.input(type^=‘p’)
2.input[type$='d’
3.input[type*=‘w’]
定位——by(了解)

WebDriver除了提供以上定位API方法(driver.find_element_by_xxx())外,还提供了另外一套写法。

导入包,调用find_element()方法,通过by来声明定位的方法,并且传入对应的方法和参数

from selenium。webdriver.common.by import By

方法:

find_element(By,ID,"userA")    #需要自行传入两个参数,第一参数为定位的类型,由By提供,第二个参数为定位的具体方式,第三位为值(与以上方法对应类似)

快速导入包By:
光标至By→ctrl+Alt+空格→找到(selenium.webdriver.common.by)→回车
在这里插入图片描述

在这里插入图片描述

打开函数,其实driver.element_by_css_selector是对By函数的封装,两者等价(不过,还是推荐使用前一种方法)
在这里插入图片描述
eg.打开网站,输入相关字符

from selenium.webdriver.common.by import By
from selenium import webdriver
driver=webdriver.Firefox()
url="https://www.baidu.com/index.php?tn=monline_3_dg"
driver.get(url)
#使用by类
driver.find_element(By.CSS_SELECTOR,'#kw').send_keys("admin")
#或者
driver.find_element(By.ID,'kw').send_keys("admin")
driver.find_element_by_css_selector("#kw").send_keys("admin")
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值