Python Selenium UI自动化测试
1、自动化测试基础
1.1 自动化测试的定义
- 将人为的测试行为转化为机器自动执行的过程
1.2 自动化测试的目的
- 减少成本,提高测试效率
- 减少人为因素对测试的影响
1.3 什么项目适合做自动化测试
- 项目界面稳定
- 需求明确
- 项目周期长
- 测试脚本可以重复使用
- 需要频繁地进行回归测试
1.4 难点
- 对比手工UI测试,UI自动化测试有如下的难点:
1)UI本身的变化性,要想达到和手工测试相同的覆盖率,单纯的UI自动化测试往往很难 证明自己的投资回报; 2)UI控件元素本身识别的复杂性;
3)UI自动化测试出现问题时,恢复到下一条测试case执行的场景是复杂的。因为出现 这种问题的意外,是非“预期”的;
2、搭建自动化测试环境
2.1 安装python
略
2.2 安装selenium
# 安装Selenium的最新版本
pip install selenium
# 安装Selenium指定版本
pip install selenium==2.53.0
2.3 下载webdriver驱动
以chrome浏览器为例
- 查看chrome浏览器版本:在地址栏输入 chrome://version
- chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html
- 下载与浏览器版本对应的chrome driver
- 将下载好的chrome driver 解压,并放至到Python安装路径的根目录 (安装路径随意一个都行)
2.4 第一个自动化测试脚本
- 打开浏览器
- 访问百度首页
from selenium import webdriver # 导入webdriver
d = webdriver.Chrome() # 创建浏览器对象,此方法需要提前将webdriver驱动添加到系统环境变量
d.get('https://www.baidu.com') # 调用get方法访问百度首页
d.close() # 关闭浏览器
3、webdriver API
3.1 浏览器操作
3.1.1 浏览器最大化
- driver.maximize_window()
3.1.2 设置浏览器的宽和高
- driver.set_window_size(480,800)
3.1.3 控制浏览器前进、后退
- 前进: driver.forward()
- 后退: driver.back()
3.1.4 关闭浏览器
- 关闭当前窗口: driver.close()
- 关闭浏览器: driver.quit()
3.1.5 浏览器刷新
- driver.refresh()
3.1.6 获取当前URL
- driver.current_url
3.1.7 获取当前title
- driver.title
3.1.8 浏览器截图
- driver.save_screenshot(图片路径)
--路径参数必填
--图片格式必须为png
3.2 元素定位
3.2.1 常见的属性
- class:元素的类名
- id:元素的唯一id
- name:元素名,大部分情况唯一
3.2.2 八大元素定位方法
- 元素定位和操作是自动化测试的核心部分
- 一个元素就像一个人,有自己的特征(属性)
- webdriver提供了一系列的元素定位方法,常用的有下面几种:
- id:根据元素id值
- name:根据元素name值
- class name:根据元素class值
- tag name:根据元素标签名字
- link text:根据超链接的文本内容
- partial link text:根据超链接的部分文本内容
- xpath:根据xpath
- css selector:通过css定位
xpath定位
语法
/ :从根节点选取(绝对路径)
// :从当前节点选取,不考虑节点的位置(相对路径)
.. :选取当前节点的父节点 搜索框的上两级父节点: //*[@id='kw']/../..
@ :选取属性
举例:
相对路径: //div[@class='entry-sider-panel']/section[@class='entry-sider-panel__bd']/div/div[1]
CSS定位
语法
#:选取id属性,#kw
.:选取class属性
[]:选取其他属性,如:[id='xx']
> :层级选取,如:#form>span>input
举例:div.entry-sider-panel>section.entry-sider-panel__bd>div>div:nth-child(1)
3.3 元素操作
3.3.1 输入内容
send_keys()
3.3.2 点击元素
click()
3.3.3 清空元素文本内容
clear()
3.3.4 获取元素文本
text
- 返回的是字符串
3.3.5 获取元素尺寸
size
- 返回的是字典
3.3.6 获取元素的属性值
get_attribute('属性值') --如id,class
4、设置等待时间
4.1 强制等待
sleep()
- 需要先导包,import time
4.2 隐式等待
driver.implicitly_wait(秒)
- 智能等待是在等待周期内一直等待元素是否出现,如果元素出现则继续,元素在等待周期内没有出现则报错
- 推荐等待时间:10-30秒
- 隐式等待只需设置一次就可以对整个脚本文件生效
4.3 显式等待
显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常
示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://www.baidu.com") # 每隔 0.5s 检查一次(默认就是 0.5s), 最多等待 5 秒
element = WebDriverWait(driver, 5, 0.5).until( EC.visibility_of_element_located( (By.ID, "kw")
) )
element.send_keys('selenium')
driver.quit()
5、滚动条操作、下拉框操作
5.1 操作滚动条
注意:操作滚动天是通过js操作的,不是通过selenium操作的
方法一:
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.set_window_size(688,476)
sleep(1)
js = 'window.scrollTo(0,10000)' # 拖动到底部
driver.execute_script(js) # 执行js命令
sleep(1)
js2 = 'window.scrollTo(10000,0)' # 从左拖到右
driver.execute_script(js2)
sleep(1)
js3 = 'window.scrollTo(10000,10000)' # 拖到右下角
driver.execute_script(js3)
sleep(2)
driver.quit()
方法二(推荐):
target = self.element(self.locators['product_des']) # 定位到目标元素
self._driver.execute_script("arguments[0].scrollIntoView();", target) # 滚动条滑动到目标元素
5.2 操作下拉框
方法一:二次定位,先定位到下拉框,然后通过里面的值进行定位
方法二:通过select库进行操作
示例代码:
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('file:///C:/Users/Eccang/Desktop/test.html')
sleep(1)
# 方法一
# 二次定位
m = driver.find_element_by_id('abc') # 先定位到下拉框
# m.find_element_by_xpath("//*[@value='p1']").click() # 再定位一次选择里面的选项
# 方法二
Select(m).select_by_index(1) # 根据索引值选择
sleep(1)
Select(m).select_by_value('p2') # 根据值选择
sleep(1)
Select(m).select_by_visible_text('深圳') # 根据可见文本选择
6、多窗口处理、弹框处理
6.1 多窗口处理
根据窗口的handle值进行切换
获取当前窗口handle值:driver.current_window_handle
获取所有窗口handle值:driver.window_handles
根据handle值切换窗口:driver.switch_to.window(窗口handle值)
6.2 弹框处理
点击确定:driver.switch_to.alert.accept()
点击取消:driver.switch_to.alert.dismiss()
弹框中输入文本:driver.switch_to.alert.send_keys()
获取弹框中的文本内容:driver.switch_to.alert.text
7、框架切换、文件上传
7.1 框架切换
切换框架:driver.switch_to.frame(id/name)
返回默认框架:driver.switch_to.default_content()
7.2 文件上传
对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过 send_keys()指定本地文件路径的方式实现文件上传
对于非 input 标签实现的上传功能,我们可以通过模拟键盘敲击的方式实现,代码如下:
import win32com.client # 导入Windows API模块
driver.find_element_by_css_selector("#top .icon").click()
sh = win32com.client.Dispatch("WScript.shell")
time.sleep(3)
sh.Sendkeys("C:\\Users\Downloads\f89860fb73c0ba14c9b88845eb10b928.jpeg\n")
8、浏览器无头模式
chrome_options = Options() # 开发者模式,防止被各大网站识别出来用了selenium
chrome_options.add_argument('--headless') # 添加谷歌无头浏览器模式
driver=webdriver.Chrome(options=chrome_options) # 谷歌无头浏览器模式
9、单例模式
单例模式:单例模式就是确保一个类只有一个实例.当你希望整个系统中,某个类只有一个实例时,单例模式就派上了用场
由于在做web UI测试的时候需要浏览器对象,在实际写脚本的过程中可能会遇到只要调用一次webdriver就会生成一个浏览器对象,此时我们可以用到单例模式来处理(或者自己写一个判断语句也是可以处理的)。具体实现代码如下:
后续有时间会补充一些写自动化测试用例过程中需要用到的分层思想,已经一些测试用例、脚本关联、数据处理方面的东西。。。
Python Selenium UI自动化测试相关推荐
- Selenium UI自动化测试(三)IDE—百度个人中心录制实例
Selenium UI自动化测试(三)百度个人中心查看评分实例详解 录制脚本 菜单点击+添加新的测试用例,弹出测试网址输入百度网址,输入完后点击开始录制 点击右边REC开始录制,进入首页右上角用户名, ...
- 关于python+selenium的自动化测试需要用到的知识点总结
关于python+selenium的自动化测试需要用到的知识点总结 自己总结的python+selenium自动化测试的知识点, ***基础使用的整合案例:在第十六条与第十八条 *** # codin ...
- Python Selenium UI 实现视频自动化播放
Python Selenium UI 实现视频自动化播放 1.需求:实现某一课程自动播放 from selenium import webdriver from selenium.webdriver. ...
- python+selenium+unittest自动化测试框架
前言 关于自动化测试的介绍,网上已有很多资料,这里不再赘述,UI自动化测试是自动化测试的一种,也是测试金字塔最上面的一层,selenium是应用于web的自动化测试工具,支持多平台.多浏览器.多语言来 ...
- Python + Selenium + UnitTest自动化测试面试题目整理
1.如何使用Selenium进行自动化测试 ? 结合Python + Selenium + UnitTest 2.自动化测试框架 分层+PO模式: 包含基础封装层BasePage.PO页面对象层.Te ...
- 快速搭建Python+Selenium+Sublime 自动化测试环境方法
随着业内越来越多的公司对自动化测试的大力推行,对测试人员能够使用自动化工具的要求也随之增多.为了能让更多的同事在学习selenium的初期,能够顺利的迈出第一步,即可以通过代码操作selenium d ...
- python测试系列教程——python+Selenium+chrome自动化测试框架
全栈工程师开发手册 (作者:栾鹏) python教程全解 需要的环境 浏览器(Firefox/Chrome/IE-) Python Selenium Selenium IDE(如果用Firefox) ...
- python selenium UI自动化解决验证码的4种方法
测试环境 windows7+ firefox50+ geckodriver # firefox浏览器驱动 python3 selenium3 selenium UI自动化解决验证码的4种方法:去掉验证 ...
- python个人自动化_GAD名人堂丨方李志专访 :于Python的UI自动化测试探索者
个人简介 方李志,UI自动化测试资深专家,腾讯游戏研发部品质管理深圳团队负责人,十五年来一直从事UI自动化测试研究与实施.开发过UI自动化测试框架.分布式自动化测试平台等,曾获得卓越研发质量铜奖.EV ...
最新文章
- SAP QM 源检验(Source Inspection)功能展示
- [转载]java日志框架log4j详细配置及与slf4j联合使用教程
- python列表解析
- LR12的log解释
- Linux内核探讨-- 第一章
- Java设计模式-工厂模式(2)工厂方法模式
- Java script第二课
- A* a=new B ,会不会产生内存泄露了,露了B-A的部分?
- linux p7zip密码,linux下7zip使用方法
- 洛谷P4092树——并查集
- 机器人跟踪_使用手机和机器学习跟踪睡眠
- 伟大的个性化主页:6种服务可替代iGoogle
- 请没有买房和买车的朋友一定认真的看一下,看后再做决定吧..
- bmp批量转换jpg的方法
- 高中数学必修一,集合知识概念运算归纳总结
- 【166】VS2022调试通过海康人脸抓拍SDK的C++代码
- 乐视账号服务器关闭,乐视手机账号登陆不了最新解决方法,包括恢复出厂后无法登陆问题...
- 复选框checkbox自定义样式
- c语言压力变送器程序设计,基于单片机的压力变送器设计
- mysql 下一年_mysql时间增加一年
热门文章
- 计算机系统基础课程实验课bomb--phase_5
- s3c2440芯片累加汇编语言,S3C2440学习二(基础资源的使用)
- Hardware ---- 输入阻抗
- topPanel在java中_java – 多个JPanel GridBagConstraints对齐
- 黑苹果适合什么用途?_黑鲨六大配件:用途各不同,苹果安卓都能用
- sqlserver 的数据迁移
- 台式计算机一开机滴滴响,家里台式电脑一开机就滴滴滴的响(听着像报警)请问是为什么...
- 购物车(七)-计算商品总价——计算总价-计算属性 数据缓存api-wx.setStorageSync()方法
- 烧录引导程序出错_自学「单片机」时许多人都绕不开的一个词「烧录」,你了解多少?...
- 正态分布具有很多好的性质,很多模型假设数据服从正态分布。但是如果数据不服从正态分布怎么办?