作为刚入门自动化测试的小白,本篇博客用于记录学习自动化中所涉及的一些知识,话不多说,直接起飞!
1.环境搭建
- 安装python及pycharm。
- 安装selenium
- 更新浏览器版本,并下载对应浏览器驱动,将浏览器驱动放到python安装路径下(注意是python路径,不是pycharm!!!)
安装selenium可采取两种方法,通过dos命令执行:
pip install selenium
通过pycharm直接添加插件:
谷歌浏览器驱动下载地址(火狐自己百度):
http://npm.taobao.org/mirrors/chromedriver/
2.元素定位方法
- 通过id:find_element_by_id()
- 通过class:find_element_by_class_name()
- 通过name:find_element_by_name()
- 通过链接文本(<a></a>标签):find_element_by_link_text()
- 通过链接的一部分(比如京东是个链接,京是其中一部分):find_element_by_partial_link_text()
- 通过css选择器:find_element_by_css_selector()
- 通过xpath:find_element_by_xpath()
- 通过标签:find_element_by_tag_name()
- 复合定位(定位一组元素):find_elements
- 注意:当你采用上述方法无法定位到元素时,需要从三个方向判断:元素信息错误没、元素是否被隐藏是否重名、元素是否在frame里。如果没找到错误,那没办法,是这样的,李姐一下,只能发挥你的聪明才智了,相信自己总能找到的。
- 另附上frame切换操作:switch_to.frame()切换到frame、switch_to.default_content()返回,退出frame
3.一些常用方法
- get_attribute():获取元素的属性值,括号内填入需要获取的属性
- send_keys():在元素中输入内容
- clear():清除
- is_displayed():是否显示,返回值为布尔类型
- is_selected():是否选择
- is_enabled():是否可用
- maxmize_window():窗口最大化
- text:获取元素文本内容
- current_window_handle:获取窗口句柄
- current_url:当前url
- quit():退出浏览器
- close():关闭当前窗口
- back():回退
- forward():前进
4.一些鼠标及下拉框操作
a.鼠标悬停,话不多说,直接上代码(跳过driver创建等步骤)
#导包
from selenium.webdriver.commin.action_chains import ActionChains
#鼠标移上操作,这里悬停出现元素不一定是链接,所以根据实际情况操作
ActionChains(driver).move_to_element(定位元素).perform()
driver.find_element_by_link_text(悬停出现元素).click()
b.下拉列表框,老规矩
#导包
from selenium.webdriver.support.select import Select
Select(定位元素).select_by_index():通过索引选择
Select(定位元素).select_by_value():通过值选择
Select(定位元素).select_by_visible_text():通过文本选择
Select(定位元素).options:列表显示,可通过len()求长度
5.三类等待
相信大家初学自动化测试,看了无数视频博客,发现大部分都是强制等待time.sleep()。我吐了,天天等待,代码半小时,运行一年半,人都给你搞裂开,接下来将为大家展示selenium的三大等待:
a.强制等待:time.sleep(休眠时间)
顾名思义,强制等待,强制变态,叫你多快就多快。
优点:我虽然变态,但我简单啊,男人都喜欢简单的
缺点:浪费时间,使用过于固定
b.隐式等待:driver.implicitly_wait(30)
设置一个全局的等待,对于整个driver生命周期都能起到作用,每一次操作都会调用隐式等待。隐式等待结束的标志:1.页面全部加载完成。2.设置的隐式等待时间截止。
优点:不用频繁进行等待的添加,一次添加终生有效。
缺点:无法对指定的元素进行等待、浪费一定的时间。
c.显式等待:WebDriverWait(driver,timeout =30,poll_frequency=0.5).until(lambda el:driver.find_element_by······)
对指定元素进行等待的一种等待方式,通过设置最大等待时间,检查频率对页面来进行等待,一旦找到该元素,则停止等待。timeout即最大等待时间,poll_frequency即检查频率,在实际使用中,这两个参数名字可省略,直接填入值,poll_frequency默认为0.5。
显示等待分为unitl和until_not,until是当条件为真,则进行后续操作,NotUnitl则相反,当最大等待时间达到,依旧没有找到元素,报等待超时异常。
优点:1.直接对元素进行定位,花费最少的时间,来实现整个流程。
2.用于作为断言的校验标准之一。
缺点:和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入。
注意:在实际使用中,通常隐式等待,显式等待结合使用。有些小小白可能不太懂lambda是啥,lambda为匿名函数,可理解为:def abc(el):el.find_element......。对于这里为什么用el而不是driver,其实这里的el就是driver,大家可看源码:
6.注意事项
自动化测试并非查找元素这么简单,要是你这么认为,那你可就输了,没错,因为我输过一次了(手动狗头)。自动化测试不需要太多开发思想,如果想逻辑填满,那你可天真了,代码能写到你自己吐。所以测试中,往往要注意以下原则:
a.自动化测试用例一般只实现核心业务流程或者重复执行率较高的功能
b.自动化测试用例的选择一般以"正向"逻辑的验证为主,所谓正向,即正确的那一条
c.不是所有手工用例都可以使用自动化测试来执行
d.尽量减少多个用例脚本之间的依赖
e.自动化测试用例执行完毕之后,一般需要回归原点