本篇博客
1.Selenium自动化测试框架
1.1 什么是框架?
1.2 为什么使用框架?
1.3 Selenium概述
1.4 Selenium工作原理(重要)
2.Selenium概述
3. Selenium IDE
3.1 什么是Selenium-IDE?
3.2 环境安装
3.3 IDE功能简介
3.4 案例
4. Selenium API基础
4.1 浏览器驱动对象
4.2 页面操作
4.2.1 url的格式
4.2.2 http和https的区别
4.2.3 DNS域名服务
4.3 页面请求操作
4.3.1 获取断言信息
4.3.2 元素的定位
1.Selenium自动化测试框架
1.1 什么是框架?
框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。
框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是
从目的方面给出的定义。
框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。
1.2 为什么使用框架?
- 1)自己从头实现太复杂
- 2)使用框架能够更专注于业务逻辑,加快开发速度
- 3)框架的使用能够处理更多细节问题
- 4)使用人数多,稳定性,扩展性好
1.3 Selenium概述
1.什么是Selenium?
Selenium是ThoughtWorks公司的一个强大的开源Web功能测试工具系列,采用Javascript来管理整个测试过程,包括读入测试套件、执行测试和记录测试结果。
2.Selenium的特点
1)它采用Javascript单元测试工具JSUnit为核心,只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。
2)Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
3.Selenium历史
2004年Jason Huggins开始研发Selenium核心。
2006年Selenium RC加入了进来。
2011年Selenium 2.0(Webdriver支持)替代了RC
2016年10月Selenium 3.0出生。
2.每代的变化
1)Selenium1
一代的selenium存在一些缺陷,但是也没有影响其功用。但是现在我们基本上已经不使用这个版本了
2)Selenium2(下面学的是这个。)
写作Selenium2,读作webdriver,webdriver是google的自动化测试框架(或者说是套规范API)webdriver 与seleinum 各有优点, 两个团队都认为合并会更牛逼,在Selenium 2.0中 主推的是WebDriver,于是:
selenium 2.0 = selenium RC + webdriver。
3)Selenium3
支持的浏览器更多了
1.4 Selenium工作原理
1) selenium组件(重要)
2) Selenium RC 与 webdriver
3) webdriver工作原理
Selenium RC 和Webdriver的区别:
Selenium RC:需要服务器配合使用
Webdriver:需要安装正确版本的浏览器驱动。
4) .selenium环境搭建(详情查阅讲义)
1.材料:
1)python3.5(是3.6或者3.7也没关系)
2)Firefox35 (这个版本的火狐不需要安装浏览器驱动,默认安装了。但是在这个版本之上就要自己安装了。)
3)selenium2框架(稳定版 2.53.1)
pip install selenium==2.53.1
卸载:pip uninstall selenium
4)浏览器驱动
chrome(下载适合自己谷歌版本的chromedriver.exe,拷到python.exe路径下,加环境变量)
Phantomjs(无头浏览器用的不多)
ie
2.安装python3.5(可参考安装步奏)
1. 点击下面箭头所指:
2. 点击Downloads--windows
3. 下面点击对应的下载就行
Windows x86-64:指的是windows64位。
Windows x86:指的是windows32位。(不知道自己的是32位还是64位,就安装32位。向下兼容的)
embeddable zip file:解压。拷贝。用于嵌入式开发的比较多。
executable installer:可执行安装包。(我们一般用这个比较多。)
web-based installer:基于网络安装。
3. Selenium IDE
3.1 什么是Selenium-IDE?
Selenium的IDE(集成开发环境)是一个易于使用的Firefox插件,用于开发Selenium测试案例。它提供了一个图形用户界面,用于记录使用Firefox浏览器,用来学习和使用Selenium用户操作,但它只能用于只用Firefox浏览器不支持其它浏览器。
3.2 环境安装
firefox官网
3.3 IDE功能简介
1.文件:创建、打开和保存测试案例和测试案例集。编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令。Options : 用于设置seleniunm IDE。
2.用来填写被测网站的地址。
3.速度控制:控制案例的运行速度。
4.运行所有:运行一个测试案例集中的所有案例。
5.运行:运行当前选定的测试案例。
6.暂停/恢复:暂停和恢复测试案例执行。
7.单步:可以运行一个案例中的一行命令。
8.录制:点击之后,开始记录你对浏览器的操作。
9.案例集列表。
10.测试脚本;table标签:用表格形式展现命令及参数。source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示。
11.查看脚本运行通过/失败的个数。
12.当选中前命令对应参数。
13.日志/参考/UI元素/Rollup
3.4 案例:
录制百度搜索脚本
1.打开浏览器
2.打开插件
3.点击录制按钮
4.在浏览器执行如下操作:
- 访问百度
- 搜索python
- 搜索传智播客
- 点击右侧相关人物右侧展开
- 点击顶端百度贴吧
- 点击精品
5.点击录制按钮停止录制
4. Selenium API基础
Selenium API这部分非常重要,原因如下:
1)api就是使用的selenium2.0主推的webdriver
2)3.0继续要用这套API
3)后续课程移动端功能测试用到的appium其实就是对selenium的在封装
4.1 浏览器驱动对象
1)库的导入
from selenium import webdriver
2)创建浏览器对象
driver = webdriver.xxx()
使用dir(driver)查看方法
print(dir(driver))
案例1:
from selenium import webdriver # 创建一个浏览器对象 driver = webdriver.Firefox() print(dir(driver)) # 关闭浏览器 driver.quit() # driver.close()
注意:
driver.close()关闭当前窗口
driver.quit()退出驱动关闭所有窗口
3)浏览器尺寸相关操作1
maximize_window() 最大化
get_window_size() 获取浏览器尺寸
set_window_size() 设置浏览器尺寸
案例2:
脚本操作打开一个测试浏览器,并调整其大小
from selenium import webdriver import time # 创建一个浏览器对象 driver = webdriver.Firefox() # 设置全屏 driver.maximize_window() time.sleep(3) # 获取当前浏览器尺寸 size = driver.get_window_size() print(size) # 设置浏览器尺寸 # 因为有的时候会测手机端,可以在电脑上设置手机大小的尺寸 driver.set_window_size(400,400) size = driver.get_window_size() print(size) time.sleep(3) # 关闭浏览器 driver.quit() # driver.close()
3)浏览器位置相关操作2
get_window_position() 获取浏览器位置
set_window_position(x,y) 设置浏览器位置
注:显示器以左上角为(0,0),所有的位置操作都是相对于显示器左上角展开的位移操作,单位是像素。
4)浏览器的关闭操作
close() 关闭当前标签/窗口
quit() 关闭所有标签/窗口
案例3:
打开浏览器,调整大小,调整位置,并关闭
from selenium import webdriver import time # 创建一个浏览器对象 driver = webdriver.Firefox() # 获取浏览器位置 position = driver.get_window_position() print(position) # 设置浏览器位置 driver.set_window_position(100,200) time.sleep(3) # 关闭浏览器 driver.quit() # driver.close()
4.2 页面操作
4.2.1 url的格式:
形式 scheme://host[:port#]/path/…/[?query-string][#anchor]
凡是[ ]都可以省略。
scheme:协议(例如:http, https, ftp)
host:服务器的IP地址或者域名
port:服务器的端口(如果是走协议默认端口,80 or 443)
path:访问资源的路径
http://www.cnblogs.com/be-saber/p/4734951.html
query-string:参数,发送给http服务器的数据,参数使用&隔开
anchor:锚(跳转到网页的指定锚点位置)
https://detail.tmall.com/item.htm?id=545181862652
4.2.2 http和https的区别:
HTTP:明文传输
- 超文本传输协议
- 默认端口号:80
HTTPS:对传输内容加密
- HTTP + SSL(安全套接字层,)
- 默认端口号:443
4.2.3 DNS域名服务
DNS:域名解析(把域名解析IP地址操作)
IP地址:4段数字
域名(例如):www.baidu.com
4.3 页面请求操作
请求某个url对应的响应,url需要加协议(http://或者https://)
driver.get(url)
刷新页面操作
refresh()
回退到之前的页面
back()
前进到之后的页面
forward()
案例4:
1)访问 http://www.baidu.com
2)访问 https://zhuanlan.zhihu.com/
3)回退
4)前进
from selenium import webdriver import time # 创建浏览器对象 driver = webdriver.Firefox() url1 = 'http://www.baidu.com' driver.get(url1) print('访问',url1) url2 = 'https://zhuanlan.zhihu.com' driver.get(url2) print('访问',url2) # 后退操作 time.sleep(2) driver.back() print('后退到',url1) # 前进操作 time.sleep(2) driver.forward() print('前进到',url2) time.sleep(2) # 关闭浏览器 driver.quit()
4.3.1 获取断言信息
1)什么是断言?
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
2)获取断言信息的操作:
获取当前访问页面url,注意不需要括号。
current_url
获取当前浏览器标题
title
保存图片:selenium2需要自己写,3的话可以加参数。
get_screenshot_as_png()
直接保存(推荐):可以加绝对路径,默认保存在当前路径。
get_screenshot_as_file(file)
网页源码
page_source
案例:
1.使用current_url改造页面操作案例
from selenium import webdriver import time # 创建浏览器对象 driver = webdriver.Firefox() url1 = 'http://www.baidu.com' driver.get(url1) print('访问',driver.current_url) url2 = 'https://zhuanlan.zhihu.com' driver.get(url2) print('访问',driver.current_url) # 后退操作 time.sleep(2) driver.back() print('后退到',url1) # 前进操作 time.sleep(2) driver.forward() print('前进到',driver.current_url)
2.访问 http://www.baidu.com,2种方法保存百度图片
from selenium import webdriver # 创建浏览器对象 driver = webdriver.Firefox() # 访问百度 url = 'http://www.baidu.com' driver.get(url) print(driver.current_url) print(driver.title) # 保存快照操作 driver.get_screenshot_as_file('baidu.jpg') # 自己写文件,保存图片 data = driver.get_screenshot_as_png() with open('baidu2.jpg','wb') as f: f.write(data) driver.close()
字符串类型转换(str,bytes):
str---> bytes data.encode()
bytes-> str data.decode()
3.使用phantomjs浏览器执行上述案例,并且保存源码。
from selenium import webdriver # 创建浏览器对象 driver = webdriver.PhantomJS(executable_path=r'F:2020软件测试第二版就业班6-20部分13_就业班之web端自动化测试(共82集)day1web自动化day01 2-其他资源环境安装包phantomjs-2.1.1-windowsinphantomjs.exe') # driver = webdriver.PhantomJS() 没有配置环境变量不行。 # 访问百度 url = 'http://www.baidu.com' driver.get(url) data = driver.page_source print(type(data)) # 以二进制类型写入文件 with open('baidu.html','wb') as f: f.write(data.encode()) # 虽然是str类型,但是w 写不进去 # 就用wb 二进制类型写入 # data.encode() str--> bytes driver.close()
4.3.2 元素的定位(重点)
1)元素定位方法的分类(调用方式):
1.直接调用型(推荐方式)
driver.find_element_by_xxx(value)
2.使用By类型(需要导入By)
from selenium.webdriver.common.by import By driver.find_element(By.xxx,value)
案例:用以上两种方式是实现百度中搜索 传智播客
第一种:driver.find_element_by_xxx(value)
from selenium import webdriver import time # 创建浏览器对象 driver = webdriver.Firefox() # 访问百度 url = 'http://www.baidu.com' driver.get(url) time.sleep(1) # 定位到搜索框元素 el = driver.find_element_by_id('kw') # print(el) # print(type(el)) # print(dir(el)) # 向输入框输入文字 el.send_keys('创智博客') time.sleep(2) # 定位搜索点击按钮 el_click = driver.find_element_by_id('su') el_click.click() time.sleep(2) driver.close()
第二种:driver.find_element(By.xxx,value)
from selenium import webdriver # 导入By from selenium.webdriver.common.by import By import time driver = webdriver.Firefox() url = 'http://www.baidu.com' driver.get(url) # By调用的定位方式全部为大写 el = driver.find_element(By.ID,'kw') # 输入搜索关键字(向可输入元素输入文本内容) el.send_keys('itcast') # 定位到搜索按钮 el_sub = driver.find_element(By.ID,'su') # 点击元素 el_sub.click() time.sleep(3) driver.close()