目录
一、基础准备
1. 环境搭建
2. Selenium 原理
2.1 设置浏览器驱动
2.2 Selenium元素定位
2.3 控制浏览器操作
2.4 webdriver常用方法
2.5 鼠标事件
2.6 键盘事件
2.7 获取断言信息
2.8 设置元素等待
2.9 多窗口切换
2.10 警告框处理
2.11 下拉框选择
2.12 文件上传
2.14 调用 JavaScript
2.15 窗口截图
2.16 关闭浏览器
二、通用模型
1. 启动测试页面
2. 页面元素查找
3. 生成测试数据
4. 图片验证码破解
4.1 定位验证码图片
4.2 识别图片验证码
5. 读取元素配置文件
5.1 创建配置文件
5.2 读取配置文件
6. 查找元素封装
7. 代码封装
7.1 异常处理
7.2 兼容多浏览器执行
8. 日志记录
8.1 在 console 输出log
8.2 输出log到文件
9.识别验证码
三、PO模型
1. 元素查找
2. 操作层
3. 业务层
4. 测试层
四、数据驱动框架
1. DDT 入门
2. 实践应用
五、关键字模型
1. 构建关键词类
2. 关键词模型测试用例
2.1 读取Excel
2.2 测试用例实践
六、行为驱动模型
工欲善其事必先利其器,废话不多说。我们先开始搭建环境。
# 创建项目目录
mkdir WebTesting
# 切换到项目目录下
cd WebTesting
# 安装虚拟环境创建工具
pip install virtualenv
# 创建虚拟环境,env代表虚拟环境的名称,可自行定义
virtualenv env
# 启动虚拟环境,执行下面命令后会发现路径上有 (env) 字样的标识
source env/Scripts/activate
# 查看 (env) 环境下使用的 Python 和 pip 工具版本
ls env/Scripts/
# *** 安装 Selenium ***
pip install selenium
# 退出虚拟环境,退出后路径上的 (env) 字样的标识消失
cd env/Scripts/
deactivate
# 导出环境所需要的模块的清单
pip freeze >> requirements.txt
# 上传 GitHub 时,将下面项忽略上传
echo env/ >> .gitignore
echo WebTesting.iml >> .gitignore
echo __pycache__/ >> .gitignore
# 将代码传至 GitHub
# 本地仓初始化
git init
# 创建本地仓与 GitHub 仓的远程链接
git remote add github 你的github仓的地址
# 将代码添加到暂存区
git add .
# 将代码提交到
git commit -m "init environment"
# 将代码上传到GitHub仓中
git push github master
初始化环境的项目结构示例如下:
Selenium 是一套完整的 web 应用程序测试系统 ,它包含了测试录制(Selenium IDE)、编写及运行(Selenium Remote Control) 和测试的并行处理(Selenium Grid)。Selenium的核心 Selenium Core基于 JsUnit,完全由 JavaScript 编写,因此可以运行于任何支持 JavaScript 的浏览器上。其基本原理如下:
from selenium import webdriver
driver = webdriver.Firefox() # Firefox浏览器
driver = webdriver.Chrome() # Chrome浏览器
driver = webdriver.Ie() # Ie浏览器
driver = webdriver.Edge() # Edge浏览器
driver = webdriver.PhantomJS() # PhantomJS()
# 通过 id 定位
dr.find_element_by_id("kw")
# 通过name定位:
dr.find_element_by_name("wd")
# 通过class name定位:
dr.find_element_by_class_name("s_ipt")
# 通过tag name定位:
dr.find_element_by_tag_name("input")
# 通过 xpath 定位的几种写法
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
# 通过 css 定位的几种写法
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
# 通过 link_text 定位
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")
# 如果是定位一组元素,用下面
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
(1) 控制浏览器窗口大小
WebDriver中 set_window_size() 方法来设置浏览器窗口的大小;maximize_window() 使打开的浏览器全屏显示。 【GitHub示例】
from selenium import Webdriver
driver = Webdriver.Chrome('../tools/chromedriver.exe')
driver.get_url('http://www.5itest.cn/register')
# 设置浏览器窗口大小
print("设置浏览器宽500,高600")
driver.set_window_size()
driver.quit()
(2) 控制浏览器后退、前进
webdriver 提供了对应的 back() 和 forward() 方法来模拟后退和前进按钮。【GitHub示例】
from selenium import webdriver
import time
# 2. 控制浏览器的前进、后退
browser_links = webdriver.Chrome('../tools/chromedriver.exe')
first_url = 'https://www.baidu.com/'
second_url = 'https://news.baidu.com/'
print("访问第一个链接:%s" % first_url)
browser_links.get(first_url)
time.sleep(1)
print("访问第二个链接:%s" % second_url)
browser_links.get(second_url)
time.sleep(1)
print("回退到第一个链接:%s" % first_url)
browser_links.back()
time.sleep(1)
print("前进到第二个链接:%s", second_url)
browser_links.forward()
time.sleep(1)
browser_links.quit()
(3) 刷新页面 F5
webdriver中可以用 refresh 方法进行页面刷新。【GitHub代码】
from selenium import webdriver
import time
refresh_url = 'http://www.baidu.com/'
browser_refresh = webdriver.Chrome('../tools/chromedriver.exe')
browser_refresh.get(refresh_url)
time.sleep(2)
browser_refresh.refresh()
browser_refresh.quit()
webdriver常用方法【GitHub示例】
(1) 点击、输入和清除
定位元素后我们还需要对元素进行操作,常用的元素操作方法有:clear()、send_keys(value)、click()
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@File : 03_commonMethod.py
@Time : 2021/7/6 12:12
@Author : Crisimple
@Github : https://crisimple.github.io/
@Contact : [email protected]
@License : (C)Copyright 2019-2021, Micro-Circle
@Desc : None
"""
from selenium import webdriver
import time
base_url = 'https://www.baidu.com'
browser = webdriver.Chrome('../tools/chromedriver.exe')
browser.get(base_url)
# 1. 清除、输入、点击
browser.find_element_by_id('kw').clear()
browser.find_element_by_id('kw').send_keys('python')
browser.find_element_by_id('su').click()
time.sleep(2)
browser.quit()
(2) 提交
submit()方法用于提交表单,在搜索框后输入关键字后,可用于“回车”模拟。
from selenium import webdriver
import time
base_url = 'https://www.baidu.com'
browser = webdriver.Chrome('../tools/chromedriver.exe')
browser.get(base_url)
# 2.提交
search_text = browser.find_element_by_id('kw')
search_text.send_keys('selenium')
search_text.submit()
time.sleep(3)
(3) 其他常用的方法
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 获得属性值。
is_displayed(): 设置该元素是否用户可见。
from selenium import webdriver
import time
base_url = 'https://www.baidu.com'
browser = webdriver.Chrome('../tools/chromedriver.exe')
browser.get(base_url)
# 3. 其他常用方法
size = browser.find_element_by_id('kw').size