selenium
web自动化测试环境搭建
1、安装python解释器
2、安装selenium包
#默认安装最新的版本
pip install selenium
所有通过pip工具下载的python的第三方模块路径在:python安装目录/lib/site-packages/
3、安装浏览器
4、安装浏览器驱动程序
脚本编写的基本步骤
# 1.导包
import time
from selenium import webdriver
# 2.创建浏览器驱动对象
driver = webdriver.Chrome()
# webdriver.Firefox()
# webdriver.Ie()
# 3.打开测试网址
driver.get("https://www.baidu.com/")
# 4.业务操作(暂停3秒)
time.sleep(3)
# 5.关闭浏览器释放资源
driver.quit()
元素定位xpath/css
元素定位的另外一种写法:
from selenium.webdriver.common.by import By
driver.find_element(By.表示你要选择定位方式类属性,"选中定位方式所要求参数")
driver.find_elements(By.表示你要选择定位方式类属性,"选中定位方式所要求参数")
常用元素操作方法
# 元素操作方法是元素对象提供的方法,元素对象是通过元素定位找回来的
# 模拟输入
element.send_keys("你自己想输入的字符串")
# 模拟点击
element.click()
# 模拟清除文本
element.clear()
常用的浏览器操作方法
# 浏览器操作方法是浏览器驱动对象提供的方法,浏览器驱动对象是通过webdriver.Chrome()创建出来
# 窗口最大化
driver.maximize_window()
# 隐式等待,timeout一般设置10-30s
driver.implicity_wait(timeout)
# 刷新页面
driver.refresh()
# 关闭当前页面
driver.close()
# 关闭浏览器驱动
driver.quit()
# 获取当前页面的标题
driver.title
# 获取当前页面的地址
driver.current_url
窗口切换
# 什么是handle
# 窗口唯一标识码,和人的身份证一样,每个人都有一张身份证且号码不相同,handle就是窗口的身份证
# 获取所有窗口的句柄
lists = driver.window_handles
# 切换指定的句柄。-1始终是切换到最新的窗口
driver.swtich_to.window(lists[-1])
常用获取元素信息的方法
1. element.size 返回元素大小
"""
场景:例如搜索结果页商品的固定规格图片大小校验
"""
2. element.text 获取元素的文本
"""
场景:例如判断搜索结果商品价格信息,那么需要获取到价格文本
"""
3. element.get_attribute("xxx") 获取属性值,传递的参数为元素的属性名
"""
场景:校验超链接href地址是否配置正确,获取href属性值
"""
4. element.is_displayed() 判断元素是否可见
"""
场景:权限限制不同的用户看到功能菜单不一样。
"""
5. element.is_enabled() 判断元素是否可用
"""
场景:某些网站在登陆的时候必须勾选它流氓协议,不勾选登陆按钮就不给你用
"""
6. element.is_selected() 判断元素是否选中,用来检查复选框或单选按钮是否被选中
"""
场景:Tpshop注册协议默认勾选
"""
鼠标操作
# a).导包
from selenium.webdriver import ActionChains
# b).创建鼠标对象
aciton = ActionChains(driver)
# c).调用右键方法,下达指令
aciton.context_click(driver.find_element_by_css_selector("#userA"))
"""
右键的菜单分为自定义菜单和浏览器默认菜单,自定义菜单是可以通过元素定位进行操作的,浏览器默认的菜单是没有办法通过自动化进行操作
"""
# 鼠标悬停
action.move_to_element("通过元素定位所找回来要进行悬停元素对象")
# 拖拽
aciton.drag_and_drop("通过元素定位找到要拖动的元素对象","要拖动的目标位置的元素对象")
"""
场景:植物大战僵尸,在线室内设计,QQ秀......
"""
# 拖动指定元素具体距离
action.drag_and_drop_by_offset("通过元素定位找到要拖动的元素对象","左右移动像素距离","上下移动的像素距离")
# d).执行鼠标操作
aciton.perform()
"""
注意点:
在代码执行鼠标操作的时候,不要手动去控制鼠标,以免抢夺鼠标的控制权。
"""
键盘操作
- 单个按键
- element.send_keys(Keys.BACKSPACE) 回退键
- 组合按键
- element.send_keys(Keys.CONTROL,‘a’) 全选
- 字符串输入
- element.send_keys(“字符串+”)
显示等待
element = WebDriverWait(driver, timeout, poll).until(lambda x: x.find_element_by_css_selector("[placeholder*='延时']"))
"""
driver:浏览器驱动对象
timeout:表示最大超时时长
poll:表示间隔时长
下拉选择框
#1.导包
from selenium.webdriver.support.select import Select
#2.实例化下拉框对象
select = Select("<select>标签的元素对象,通过元素定位的方法找回")
#3.执行选项得选择
select.select_by_index(n) #n表示索引,将所有的option选项当成一个列表,起始值为0
select.select_by_value(value) #value表示option选项value属性值
select.select_by_visible_text(text) #text表示option选项全部文本信息
"""
注意点:
1.Select类只能用于HTML原生态<select> / <option>表示下拉框
"""
弹出框
类型:确认框、警告框、信息提示框
处理方法:
# 1.获取弹出框对象
alert = driver.switch_to.alert
# 2.处理弹出框
alert.accept() #接受弹出框
alert.dismiss() #取消弹出框
alert.text #获取弹出框文本信息
"""
注意点:
1.三种形式的js弹出获取其对象的方法一致
2.警告框没有取消按钮,但是dismiss()方法一样可以取消掉警告框
"""
frame切换
- 概念:标签是HTML原生态的一种结构或者框架,通常用于广告位
- 在iframe标签中得元素不能直接进行定位的,需要执行iframe才能进行操作
- 方法:
# 切换指定的iframe
driver.switch_to.frame("<iframe>标签元素对象,通过元素定位找回来")
# 返回主页
driver.switch_to.default_content()
"""
注意事项:
1.不能跨级切换
2.不能同级切换
3.返回主页是管在多少级的子的iframe都会返回默认主页(原始页面)
"""
滚动条
方法:
# 1.定义js脚本字符串,x表示横向移动像素,y标识纵向移动的像素,要移动到最右侧或者最低部只要设置参数为无穷大即可
js = "window.scrollTo(x,y)"
# 2.执行js脚本
driver.execute_script(js)
验证码
- 常见处理方式
- 直接删除验证 -测试环境
- 万能验证码-测试环境和生产环境都可以使用
- 图片识别技术 - 不采用
- cookie技术
- 使用cookie跳过登陆
# 1.手工先拿到对应网址记录用户身份凭证cookie信息(找开发问清楚哪是记录用户登陆信息的cookie凭证)
# a.打开百度网站手工登陆成功,打开F12
# b.切换NetWork的面板
# c.刷新页面,找到第一个请求,www.baidu.com并点击
# d.找到右侧面板点击cookie的面板
# c.找到名为BDUSS的cookie,并拷贝value值,多连续点击几次,拷贝后后面会有空格,删掉
# 2.在脚本中添加手工获取的cookie信息
driver.add_cookie({"name": "BDUSS",
"value": "手工获取cookievalue值"})
# 3.刷新页面
driver.refresh()