WEB自动化测试(未完结)

WEB自动化测试

自动化测试理论概念

什么是自动化?

由机器设备代替人工自动完成指定目标的过程

优点:

  1. 减少人工劳动力
  2. 提高工作效率
  3. 产品规格统一标准
  4. 规模化(批量生产)
什么是自动化测试?

让程序代替人工去验证系统功能的过程

自动化测试能解决什么?
  1. 回归测试
  2. 压力测试
  3. 兼容性测试
  4. 提高测试效率,保证产品质量
自动化测试的优点:
  1. 较少的时间内运行更多的测试用例
  2. 自动化脚本可重复运行
  3. 减少人为的错误
  4. 克服手工测试的局限性
误区:
  1. 自动化测试可以完全替代手工测试
  2. 自动化测试一定比手工测试厉害
  3. 自动化测试可以发掘更多的BUG
  4. 自动化测试适用于任何功能
自动化测试分类:
  1. WEB自动化测试
  2. 移动自动化测试
  3. 接口自动化测试
  4. 单元测试-自动化测试
什么WEB项目适合做自动化测试?
  1. 需求变动不频繁
  2. 项目周期长
  3. 项目需要回归测试

WEB自动化测试所属分类:

1.黑盒测试(功能测试)

2.白盒测试(单元测试)

3.灰盒测试(接口测试)

主流的WEB自动化测试工具
  1. QTP 一个商业化的功能测试工具,收费,支持WEB,桌面自动化测试
  2. Selenium 一个开源的web自动化测试工具,免费,主要做功能测试
  3. Robot framework 一个基于Python可拓展地关键字驱动的测试自动化框架

selenium 1.0

  • selenium IDE(录制浏览器操作,自动化代码工具)
  • selenium Grid(分布式工具:同时启动多个浏览器)
  • selenium RC(通过JS模拟浏览器,实现自动化方式)

selenium 2.0

  • selenium1.0+WebDriver
  • 基于调用WebDriver Api来模拟用户操作
  • 支持更多编程语言
  • WebDriver的速度更快,因为它直接交互使用

selenium 3.0

  • 1.去掉了selenium RC的支持
  • 全面拥抱java8
  • 支持macOS.支持官方的safaridriver
  • 支持ie9.0版本以上
  • 通过Mozilla官方的geckodriver来支持firefox

安装selenium包

pip工具

安装:

pip install selenium

pip install selenium==2.48.0

查看:

pip show selenium

卸载:

pip uninstall selenium

chrome 驱动:https://chromedriver.storage.googleapis.com/index.html

火狐48版本以上要安装 驱动:https://github.com/mozilla/geckodriver/releases/

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
url = 'http://www.baidu.com'
driver.get(url)
sleep(3)
driver.quit()

元素定位

1.selenium提供了8种定位元素的方式:

  1. id(通过标签的id)
  2. name(通过标签的name)
  3. class_name(通过标签的class)
  4. tag_name(通过标签种类)
  5. link_text(通过定位a标签的内容)
  6. partial_link_text(定位超链接a标签的部分内容)
  7. CSS(通过标签的样式选择器)
  8. XPath(通过元素的路径)

掌握id、name、class_name、tag_name、link_text、partial_link_text、XPath、CSS定位方式的使用

id定位方法

id一般不重复

element1 = driver.find_element_by_id()
element = send_keys()//传输值,输入值
name定位方法

name可重复

driver.find_element_by_name()
class定位方法

class可重复

driver.find_element_by_class_name()
标签名定位方法
driver.find_element_by_tag_name()
a标签内容定位方法
driver.find_element_by_link_text()
a标签部分内容定位方法
driver.find_element_by_partial_link_text()
CSS定位方法
driver.find_element_by_css_selector()
  1. id选择器

  2. class选择器

    .

  3. 元素选择器

    span[]

  4. 属性选择器

    • [id=""]
  5. 层级选择器

    • body>input input直属body,不能跨层次
    • body input 可以跨层次
XPath定位方法
driver.find_element_by_xpath()

1.XPath即为XML Path的简称,它是一门在XML文档中查找元素信息的语言

快速找到元素的XPath

Chrome:

  1. 选择要定位的元素,右键——检查——复制——复制完整XPath

Firefox:

  1. 选择要定位的元素,右键——使用firebug查看元素,在对应的元素右键——在firepath面板中查看
  2. 复制XPath路径
XPath定位策略(方式)
  1. 路径——定位
  2. 利用元素属性-定位
  3. 属性与逻辑结合——定位
  4. 层级与属性结合——定位
路径——定位

链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eroH10CN-1634879881777)(C:\Users\高耀基\AppData\Roaming\Typora\typora-user-images\image-20211017163849385.png)]

绝对路径

如获得新用户注册a元素:/html/body/div/div/div[2]/div/a[@href=“register.html”]

相对路径

相对路径由//开头

//div[@class=“box”]/a[@href=“register.html”]

在标签添加属性

[@]

//*[text()="xxx"]        文本内容是xxx的元素
//*[contains(@attribute,"xxx")]         属性中有xxx的元素
//*[starts-with(@attribute,"xxx")]          属性为xxx开头的元素

操作浏览器

1.元素操作

2.浏览器常见操作API

3.鼠标及键盘的操作

4.元素等待【重点】

元素常用操作方法
  1. click() 单击元素
  2. send_keys(value) 模拟输入值
  3. clear() 清除文本

操作浏览器常用方法

  1. maximize_window() 浏览器窗口最大化
  2. minimize_window() 浏览器窗口最小化
  3. set_window_size(width,height) 设置窗口大小
  4. set_window_postion(x,y) 设置窗口位置,当x,y为整数时,窗口向右下移动
  5. back() 模拟浏览器返回按钮
  6. forward() 模拟浏览器前进按钮
  7. refresh() 刷新页面
  8. close() 关闭当前窗口,模拟点击浏览器关闭按钮
  9. quit() 关闭浏览器驱动对象,关闭所有程序启动的窗口
  10. title 获取页面title
  11. current_url 获取当前网页的url

​ title和current_url一般用于判断上一步的操作是否正确

获取元素的信息的常用方法
  1. size 返回元素的大小
  2. text 返回元素的文本内容
  3. get_attribute(“xxx”) 获取属性值,传递的参数为元素的属性名
  4. is_displayed() 判断元素是否可见
  5. is_enabled() 判断元素是否可用
  6. is_selected() 判断元素是否被选中,用于检查
鼠标操作方法

在selenium中把所有的鼠标操作封装在actionchains类中

实例化对象

action = ActionChains(driver)

方法:

  1. context_click(element) 鼠标右击
  2. double_click(element) 鼠标双击
  3. drag_and_drop(source,target) 鼠标拖动 ,source为要拖动的元素,target为拖动后的元素位置
  4. drag_and_drop_by_offset(source,x_offset,y_offset)
  5. move_to_element(element) 鼠标悬停
  6. perform() 执行
键盘操作

模拟键盘一些按键或组合键的输入,如CTRL+C,CTRL+V

封装在keys类中

常用的键盘操作

1.send_keys(Keys.BACK_SPACE) 删除键(BackSpace)

2.send_keys(Keys.SPACE) 空格键(Space)

3.send_keys(Keys.TAB) 制表键(TAB)

4.send_keys(Keys.ESCAPE) 回退键(ESC)

5.send_keys(Keys.ENTER) 回车键(Enter)

6.send_keys(Keys.COTROL,‘a’) 全选(ctrl+A)

7.send_keys(Keys.COTROL,‘c’) 复制(ctrl+c)

send_keys() 有三个功能

1.输入文本

2.上传文件

元素等待

在定位页面元素的过程中,会在指定时间内一直等待的过程

定位元素时,如果找得到元素,则不等待,若找不到元素,则等待指定的时间,若时间过了还找不到,则抛出异常

元素等待类型:

1.隐式等待

只需要设置一次,就会作用于所有元素

driver.implicitly_wait(timeout)

timeout:等待最长时间,单位秒

2.显式等待

正对单个元素设置等待

定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待,如果不能定位到该元素,则间隔一段时间后再去定位元素,如果在达到最大时还没找到指定元素,则抛出异常TimeoutException

实现方法:

导包: from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(driver,timeout,poll_frequency=0.5)

  1. driver:浏览器驱动对象
  2. timeout:超时的时长,单位秒
  3. poll_frequency:检测间隔时间,默认为0.5秒

调用方法:

until(method):直到…时

  1. method:函数名称,该函数用来实现对元素的定位
  2. 一般使用匿名函数来实现:lambda x:x.find_element_by_id(“userA”)

element = WebDriverWait(driver,5,0.5).until(lambda x:x.find_element_by_id(“userA”))

until()函数执行后返回的是一个元素

上传文件

element.send_keys(location)

element为上传文件的按钮元素

location:要上传的文件路径

下拉选择框

方法一:通过CSS直接定位下拉框的option元素并使用click方法

例如:find_element_by_css_selector(“option[value=‘105’]”)).click()

方法二:select类

select类是selenium为操作下拉框标签特殊封装的

实例化对象:
select = Select(element)

element:标签对应的元素

操作方法:

1.select_by_index(index) 根据option索引来定位,从0开始

2.select_by_value(value) 根据option属性value来定位

3.select_by_visible_text(text) 根据option属性的文本内容来定位

弹出框

网页常见的弹出框:

1.alert

2.prompt

3.confirm

弹出框处理方法:

1.获取弹出框对象

alert = driver.switch_to.alert

2.调用

alert.text() 返回alert/confirm/prompt中的文字信息

alert.accept() 接受对话框选项

alert.dismiss() 取消对话框选项

滚动条操作

selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本的方法,所以我们为您可以通过JavaScript脚本来达到操作滚动条的目的

1.设置JavaScript脚本控制滚动条

js = “window.scrollTo(0,1000)”

(0:左边距 1000:上边距,单位:像素)

2.selenium调用执行JavaScript脚本的方法

driver.execute_script(js)

frame表单切换

在selenium中封装了如何切换frame框架的方法

方法:
1.driver.switch_to.frame(frame_reference) 切换到指定frame的方法

​ frame_reference : 可以为frame框架的name、id或者定位到的frame元素

2.driver.switch_to.default_content() 恢复默认页面方法

多窗口切换

在selenium中封装了获取当前窗口句柄,获取所有窗口句柄和切换到指定句柄窗口的方法

句柄:英文handle,窗口的唯一识别码

方法:

1.driver.current_window_handle 获取当前窗口句柄

2.driver.window_handles 获取所有窗口句柄

3.driver.switch_to.window(handle) 切换指定句柄窗口

窗口截图

在selenium中截图方法:

driver.get_screenshot_as_file(imgname)

imgname: 要保存的图片名字,要有.png后缀,例如"截图.png",可设置文件路径,比如"…/img/"保存在当前python项目中

driver.get_screenshot_as_file("%s.png"%(time.strftime("%Y_%m_%d %H_%M_%S")))

验证码处理

1.去掉验证码 (测试环境-采用)

2.设置万能验证码 (生产环境和测试环境-采用)

3.验证码识别技术 (通过Python-tesseract来识别图片验证码,识别率很难达到100%)

4.记录cookie (通过cookie进行跳过登录)

操作cookie

方法:
1.get_cookie(name) name:为cookie的名称

2.get_cookies() 获取本网站所有本地cookies

3.add_cookie(cookie_dict) 添加cookie

cookie_dict: 一个字典对象,必选的键包括:“name” and “value”

操作步骤:

1.登录要测试的网页,并记录登录所需要的cookie和相应的value

2.先打开要测试的网站,再添加cookie

3.使用add_cookie() 格式例如:

add_cookie({“name” : “JSESSIONID”,“value”:“D9AC37834D99D4913B263DCCA655D74F”})

4.添加完refresh()可看到结果

UnitTest框架

核心要素

1.TestCase (测试用例)

2.TestSuite 测试套件(解决多个测试用例执行)

3.TestRunner (以文本的形式运行测试用例)

4.TestLoader (批量执行测试用例-搜索指定文件夹内指定字母开头的模块)

5.Fixture (固定装置)两个固定的函数,一个初始化时使用,一个结束时使用

断言
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值