一、web自动化测试如何实现
二、搭建测试环境
查看谷歌版本,下载对应版本的驱动程序。(更多->设置->关于goggle)
谷歌驱动程序下载地址:http://npm.taobao.org/mirrors/chromedriver/或http://chromedriver.storage.googleapis.com/index.html
解压后把chromedriver.exe拖入到pycharm中py文件运行目录中(不知道的可以随便运行一个程序然后查看
把chromedriver.exe拖入到与python.exe同级目录下。
三、对浏览器的控制
from webdriver_helper import get_webdriver
driver =get_webdriver()
driver.get("http://baidu.com")
#input()#暂时不执行下一行
driver.get_screenshot_as_file("a_访问百度.png") # png 图片格式,只能支持png
driver.maximize_window() #最大化
driver.get_screenshot_as_file("b_最大化.png")
title=driver.title #读取网页标题
#加()的是方法,不加()的是属性,属性就表示从里面获取数据,
print("标题",title) #标题,是我们的title
html=driver.page_source #读取网页html源码
print("网页源码",html)
driver.quit() #关闭浏览器
四、元素定位
对浏览器的控制,通过WebDriver对象;对网页内容(元素)的控制,通过WebElement对象。
元素定位,实际上,就是通过WebDriver,获得WebElement的过程
selenium提供了8个定位策略:
1.基于属性的定位:id、name、tag name、class name
属性就是尖括号里的内容
<input
>
2.基于文本的定位:文本可以理解为尖括号之间的文本
<a >新闻</a>
<a 这里是属性>这里是文本</a>
局限性:只能定位链接
3.基于表达式的定位(百分百能定位到的)
xpath、css selector
xpath比css好用一些,
xpath本身是文档查询语言,天生就兼容html。
所以xpath可以很好的根据文档层级进行定位(好记)
支持灵活的语法和函数,完成定位
五、xpath
1.能看懂符号
字符 | 含义 |
input | 选择所有input元素 |
* | 选择所有元素 |
/ | 从当前中选择元素 |
// | 从当前节点及以下的任意节点中选择元素 (不管在哪都能定位到) |
. | 当前节点 |
.. | 父节点 |
@(属性) | 根据属性进行筛选元素 |
[n] | 返回列结果第N项目 |
//*[@id="su"]
从整个网页中,定位id=su 任意类型的元素
2.用对函数
函数 | 左右 | 示例 |
text | 获取元素内的文本(精准匹配) | //a[text()="新闻"] |
contains | 任意位置包含(模糊匹配) | //a[contains(text(),"o")] |
starts-with | 开头相同(半模糊匹配) | //a[starts-with(text(),"地图")] |
last() | 列表最后一个 | //div[@id="s-top-left"]/a[last()] |
//*[@id="s-top-left"]/a[1]
//a[text()='新闻']
六、对元素的控制
selenium通过面向对象的方式,完成对元素的控制。
属性:获取数据
方法:改变数据
常用的属性和方法(不是全部):(方法即操作)
属性 | 内容 | 例子 |
id | 唯一标记 | 36f-6a18 |
tag_name | 标签名 | input |
location | 元素坐标 | {’x‘:298,'y':188} |
size | 元素大小 | {'height':44,'width':548} |
rect | 元素范围 | {'height':44,'weight':548,'x':298,'y':188} |
parent | webDriver实例 | 略 |
screenshot_as_base64() | 截图的base64内容 | |
screenshot_as_png() | 截图的二进制内容 | |
get_attribute(name) | 获取元素的HTML属性 | |
value_of_css_property | 获取CSS属性 | |
click() | 点击 | |
clear() | 清空内容 | |
send_keys(content) | 输入内容 |
示例:在百度搜索框输入“112233”并搜索
from selenium.webdriver.common.by import By
from webdriver_helper import get_webdriver
driver=get_webdriver()
driver.get("http://baidu.com") #控制浏览器访问百度
el_1=driver.find_element(By.XPATH,'//*[@id="kw"]') #定位输入框
el_1.send_keys("112233") #输入内容
#
#找搜索按钮
el_2=driver.find_element(By.XPATH,'//*[@id="su"]') #搜索按钮
el_2.click() #点击
input()
driver.quit()
七、Web自动化实战
测试需求:验证商城的搜索功能
测试用例:
- 用例名称:搜索手机
- 用例步骤:
- 打开被测页面
- 输入搜索词:手机
- 点击搜索按钮
- 断言:每一个搜索结果都包含“手机”二字
from selenium.webdriver.common.by import By
from webdriver_helper import get_webdriver
driver=get_webdriver()
driver.get("https://www.taobao.com/") #控制浏览器访问百度
el_1=driver.find_element(By.XPATH,'//*[@id="q"]') #定位输入框,右键copy XPTH
el_1.send_keys("手机") #输入内容
#
#找搜索按钮
el_2=driver.find_element(By.XPATH,'//*[@id="J_TSearchForm"]/div[1]/button') #搜索按钮
el_2.click() #点击
input()
driver.quit()
其实成功了(但要先登录)
获取搜索结果:
#获取搜索结果
el_list=driver.find_elements(By.XPATH,'/div/div[2]/div[1]/div[1]/div[2]/div[3]/div/div/a/div/div[1]/div[2]/div/span')#花一点时间手写xpath
#//*[@id="root"]/div/div[2]/div[1]/div[1]/div[2]/div[3]/div/div[1]/a/div/div[1]/div[2]/div/span
#//*[@id="root"]/div/div[2]/div[1]/div[1]/div[2]/div[3]/div/div[2]/a/div/div[1]/div[2]/div/span
#观察于是在不同的地方开始修改。
#assert len(el_list)==6
for el in el_list:# 从列表中取出每个数据然后从中找到手机那一列
assert "手机" in el.text #断言,元素的文本中包含”手机“