selenium+unittest 自动化测试的了解和掌握

目录

Web自动化测试

Selenium的安装

浏览器UI 测试基础代码

WebDriver框架

Web页面中元素的定位及操作

selenium中常用的元素定位方法——8种:

(by=By.ID,value='id 值') —— html元素标签中的id属性

(by=By.NAME,value='属性name的值') —— html元素标签中的name属性

(by=By.TAG_NAME,value='标签名') —— html元素标签名称

(by=By.CLASS_NAME,value='属性class的值') —— html元素标签中的class属性

(By.CSS_SELECTOR,'选择器(组合)') —— 与css样式表的选择器相似的使用方法

多选择器连接 —— 与  、 或

通过元素的路径定位元素  ———— 元素1> 元素2 >...

8.XPATH="xpath"

XPath:XML语言路径:

XPath的基本语法

(匹配)节点定位方法一:标签节点[@属性="值"]

(匹配)节点定位方法二:标签节点[text()="值"]+

组合节点定位方法

其他

后续的处理


1、首先需要理解web自动化测试以及基于selenium的web自动化测试

2、掌握python版的selenium+webdriver自动化测试的基本方法

3、了解pytest自动化框架基本机构

关于自动化测试:是通过程序代码,模拟重复人工之前的操作进行的测试,操作被测软件,检查软件的处理结果是否正确,它的特点是:前期的开发/修改的成本高,但后期的运行成本低。接入的策略是无法通过人力来实施,重复性执行次数高,故考虑时间周期,一般需要选择性的开展自动化,不是全部开展进行的;此功能+界面已经稳定,不再进行变更,且没有新的bug,在此前提下,重复性执行次数高,通常重复执行次数在5~10+次。

一般的适用场景在(回归用的)冒烟测试、回归测试自动化、性能测试

Web自动化测试

有程序(脚本)模拟人在web UI 界面上的操作和验证结果,基于GUI自动化

常用的开发工具(模块/包)selenium

app、接口 自动化

Selenium的安装

开源,跨平台,https://www.selenium.dev/

支持多种编程语言(js、python、java……),支持多浏览器

  • selenium工具包的(在线)安装:

python中独立的第三方工具包

pip install selenium,如果提示pip无法识别,需要确认path环境变量中,是否有配置...\python;  ...\python\Scripts

例如:...\python3.7.1\;   ...\python3.7.1\Scripts\

  • 浏览器的驱动安装,不同浏览器的渠道,由各官方浏览器各自实现

pip install selenium  这是打开CMD通过国外网站下载,相对速度较慢

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium  这是打开CMD通过国内清华网站上下载,相对速度较快

若以上命令下载文件,显示不存在,则可通过echo %Path%先查找到python的文件安装是否存在,若不存在,则需先安装python然后再通过网站下载

下载完成后,可通过下图查询更新版本的chrome 版本号、firefox版本号

其他浏览器驱动:

地址:http://developer.microsoft.com/en-us/microsoft.-edge/tools/webdriver/

注意:浏览器与下载的浏览器驱动版本必须匹配,所以要关闭浏览器的紫红更新选项,如:Firfox默认是开启的,以防止一段时间后,驱动器版本不匹配

根据chrome版本选择(最近的)驱动下载,进入下载(如图)的操作,下载地址:

  1. chrome:    http://npm.taobao.org/mirrors/chromedriver/  
  2. firefox:http://npm.taobao.org/mirrors/geckodriver/

a6debc0698994133938fd89fe4447637.png

 7c49598756d540a0b74b9d63782c2d89.png

 下载完成后,将下载的chromedriver.exe文件放在python安装目录下,通过CMD进入python,输入from selenium import webdriver——回车,输入browser = webdriver.Chrome()——回车,查看是否可调出弹窗;

说明:Selenium 工具包是要通过浏览器驱动软件,才能启动对应的浏览器,从而完成后续的网站访问操作的自动化

浏览器UI 测试基础代码

from selenium import webdriver      # 引入selenium.webdriver包

browser = webdriver.Chrome()             # 创建浏览器对象,注:必须已下载对应的浏览器驱动
# browser = webdriver.Firefox()
# browser = webdriver.Edge()
browser.get('http://www.baidu.com')  # 打开URL页面
browser.quit()  # 关闭浏览器,退出

WebDriver框架

  • 框架:(第三方开发出来的)一组相互配合协作的(工具)类——我们可以直接使用其中的类及其方法,访问软件/硬件
  • WebDriver 的使用:
    ​
    from selenium import webdriver      # 引入selenium.webdriver包  # webdriver是指web的驱动器
    from selenium.webdriver.common.by import By
    browser = webdriver.Chrome()        # 创建(谷歌)浏览器对象,注:必须已下载对应的浏览器驱动
    # browser = webdriver.Firefox()     #火狐浏览器
    # browser = webdriver.Edge()        #Edge浏览器
    
    br.get('具体网址') 
    
    ys_x = br.find_element(by=By.value)
    
    ​
  1. 创建浏览器对象》启动、操作、关闭浏览器
  2. (通过对象)启动浏览器,并打开页面 —— 
    browser.get('http://URL......')
    #视情况最大化浏览器窗口
    browser.maximize_window()
    
    #例题:导入文件
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    browser = webdriver.Chrome()
    browser.get('http://172.30.209.172/Web_form.htm')   #跳转网页链接的页面路径
    browser.quit()  #结束语

  3. (通过对象)关闭浏览器 —— 
    browser.quit()

W3School TIY Editorhttps://www.w3school.com.cn/tiy/t.asp?f=eg_html_doctype

<!DOCTYPE html>
<html>
<head>
<title>文档的标题</title>
</head>

<body>
<from cation='./.0.html'method='Get'>
 电话号码:<input type='text'id='id01'name='dian hua'/>
 <input type='submit'name='ti_jiao' value='提交'/>
 </from>
</body>

</html>

Web页面中元素的定位及操作

  • selenium中常用的元素定位方法——8种:

  • selenium通过UI 元素的特征,识别、定位需要操作的目标元素后,再模拟人工进行操作
  • 引用定位类By:
  1. from selenium.webdriver.common.by import By
  2. elX = browser.find_element(By.元素定位特征,'特征的值') ——返回页面上符合特征的第一个元素
  3. els =  browser.find_elements(By.元素定位特征,'特征的值') ——返回页面上所有符合特征的元素,组合一个列表
  • (By.CSS_SELECTOR,'选择器(组合)')
  1. (by=By.ID,value='id 值') —— html元素标签中的id属性

    el_x = browser.find_element(by=By.ID,value='id01')
  2. (by=By.NAME,value='属性name的值') —— html元素标签中的name属性

    el_x = browser.find_element(by=By.NAME,value='pwd')
  3. (by=By.TAG_NAME,value='标签名') —— html元素标签名称

    el_s = browser.find_elements(by=By.TAG_NAME,value='input')
    el_x = el_s[4]
  4. (by=By.CLASS_NAME,value='属性class的值') —— html元素标签中的class属性

    el_s = browser.find_elements(by=By.CLASS_NAME,value='小清新')
    el_x = ys_s[0]
  5. 5、
    el_x = browser.find_element(by=By.LINK_TEXT,value='跳转百度')
    
    6、
    el_x = browser.find_element(by=By.PARTIAL_LINK_TEXT,value='百度')
  6. (By.CSS_SELECTOR,'选择器(组合)') —— 与css样式表的选择器相似的使用方法

 选择器有:

  • 标签 —— tag
  • id —— #id的值
  • class —— .class的值
  • (自定义)属性 —— [属性名 = '值']
el_s=browser.find_elements(by=By.CSS_SELECTOR,value='input')
el_x=el_s[0]

el_x=browser.find_element(by=By.CSS_SELECTOR,value='#id03')

el_x=browser.find_elements(by=By.CSS_SELECTOR,value='.小清新')[2]

el_x=browser.find_elements(by=By.CSS_SELECTOR,value="[type='text']")[1]
  • 标签 —— tag
  • id —— #id的值
  • class —— .class的值
  • (自定义)属性 —— [属性名 = '值']
el_s=browser.find_elements(by=By.CSS_SELECTOR,value='input')
el_x=el_s[0]

el_x=browser.find_element(by=By.CSS_SELECTOR,value='#id03')

el_x=browser.find_elements(by=By.CSS_SELECTOR,value='.小清新')[2]

el_x=browser.find_elements(by=By.CSS_SELECTOR,value="[type='text']")[1]

多选择器连接 —— 与  、 或

1、与 ———— 选择器1选择器2。。。
ys_s=browser.find_element(by=By.CSS_SELECTOR,value='#id03.小清新')
ys_yong_hu_wen_ben2.send_keys('000')

2、或 ———— 选择器1,选择器2,...
ys_s = browser.find_elements(by=By.CSS_SELECTOR, value='#id01, #id03')
ys_x = ys_s[0]
ys_y = ys_s[1]

通过元素的路径定位元素  ———— 元素1> 元素2 >...

el_x=browser.find_element(by=By.CSS_SELECTOR, value='div>a')
el_x.click()

8.XPATH="xpath"

XPath:XML语言路径:

1)XML:可扩展标记语言

2)HTML:一种特定的XML —— —— 

  • 标签 与 非标签(显示内容)
  • 标签:标签名 与 属性
  • 元素(节点):父子(嵌套)、兄弟(平级)

XPath:分隔符的使用

  • 有单杠/  和  双杠//  的分隔符

例举:  xx/yy  —— 代表yy是 紧邻 的下级

            xx//yy —— 代表yy是xx的下级即可,不要求是 紧邻 的下级

XPath的基本语法

元素节点的路径定位:绝对路径、相对路径、分隔符

  • 绝对路径  ————   

1)/ 根部+   

示例1: /html   

2)从根部开始+

   /标签节点1/标签节点2/...

示例2: /html/body/form/input

​​​​​​​示例3:

el_x = browser.find_element(by=By.XPATH,value='/html/body/form/input')
el_x.send_keys('111')
  • 相对路径 

1) //标签节点1/标签节点2/... +

示例1: //form/input

2) //标签节点1/标签节点2/... +

示例2: //body/input

el_s = browser.find_elements(by=By.XPATH,value='//form/input')
el_x=el_s[0]
  • 关于分隔符

标签节点1/标签节点2:(前后)紧邻

标签节点1//标签节点2:(前后)非紧邻,后继任意位置

(匹配)节点定位方法一:标签节点[@属性="值"]

在html中节点的名称为html的标签名,属性内容为“值”的所有标签节点

el_x = browser.find_element(by=By.XPATH, value='//input[@id="id01"]')
el_x.send_keys('555')

多属性组合定位

  • 与+

标签节点[@属性1 = "值" and @属性2 = "值" ]

el_x = browser.find_element(by=By.XPATH, value='//input[@type="text" and @name="uname"]')
  • 或+

标签节点[@属性1 = "值" or @属性2 = "值" ]

el_x = browser.find_element(by=By.XPATH, value='//input[@type="text" or @name="uname"]')

(匹配)节点定位方法二:标签节点[text()="值"]+

标签节点  [text()="值"]

文本内容为"值"的标签节点

el_x = br.find_element(by=By.XPATH,
                       value="//a[text()='跳转百度']")

组合节点定位方法

例如:  //标签节点1[...]/标签节点2[...]/...

el_x = br.find_element(by=By.XPATH,
                       value="//form[@method="Get"]/input[1]")

其他

  • 父节点/子节点[序号]

从1开始,表示父节点下的第几个子节点

示例:  //form/input[1]

el_x = br.find_element(by=By.XPATH,
                       value="//form[@method="Get"]/input[1]")
  • 附录XPath语法补充

实战技巧

首先考虑id值定位

其次考虑 选择器组合值 定位

再次考虑 xpath 值定位

可以借助Firefox 的开发者工具栏

web页面中元素的定位及操作——后续的处理

找到的元素,常被执行的操作—— (文本框)输入内容:

.send_keys(内容)

.clear()

示例:

el_x.send_keys('111')
el_x.clear()

el_x.send_keys('333')

(按钮/链接)点击

.click()

示例:
el_lian_jie.click()

web页面中元素的定位及操作——验证结果

  • 页面的title

browser.title    #属性

例如:   # 是否抵达预期的新页面(也即页面标题是否OK)

if 'xxx' in browser.title:   
  print("xxx")

web页面中元素的定位及操作——小结

  1. 导入需要用到的模块(例如:selenium.webdriver.common.by.By 等待)
  2. 创建浏览器对象,也即打开浏览器
  3. 打开被测网址
  4. 找到(定位)要操作的元素节点
  5. 操作该元素
  6. 重复 #4,5,完成一个完整的业务操作流程
  7. 做预期的关键点结果验证
  8. 关闭浏览器,也即还原初始状态

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值