1.自动化测试:
通过python + selenium编写自动化测试脚本,来代替认为的功能测试。
要求对网页的元素精准定位,然后操作元素。
自动化测试适用于:
1.项目周期较长
2.版本比较稳定,回归测试,升级版本中对之前的功能自动化测试
selenium
python selenium(api)模块|webdriver(基于浏览器的)
浏览器:
定位网页
定位元素(做元素定位要做元素审核)
1.在要测试的系统中审核元素
2.选择合适的定位方式
3.优先By_ID,表单中主要By_Name,超链接By_link_Text(完整的文本)By_partial_link_text(不完整的文本)
2.定位单个元素
1.通过id定位
find_element_by_id()
2.通过name定位
find_element_by_name()
3.通过class定位
find_element_by_class_name()
4.通过tag定位
find_element_by_tag_name()
5.通过link定位
find_element_by_link_text()
6.通过partial link定位
find_element_by_partial_link_text()
7.通过xpath定位
find_element_by_xpath()
8.通过css定位
find_element_by_css_selector()
3.button按钮
click():
isEnabled():是否可用
submit():type=submit的按钮可以使用submit()同click()用于提交表单4.
4.radio/checkbox 单选/复选框
click():定位到选框可直接点击
is_displayed():是否展示
is_selected():是否选中状态
5.select 下拉框(需要用select)
select_by_index():按索引选择选项
select_by_value():按value值选择选项
select_by_visiable_text():按选项名选择选项
6.鼠标事件
ActionChains类鼠标操作的常用方法:
context_click()右击
double_click()双击
drag_and_drop()拖动
move_to_element()鼠标悬停在一个元素上
click_and_hold()按下鼠标左键在一个元素上
7.键盘操作
send_keys(Keys.BACK_SPACE)删除键
send_keys(Keys.SPACE)空格键
send_keys(Keys.TAB)制表键
send_keys(Keys.ESCAPE)回退键
send_keys(Keys.ENTER)回车键
send_keys(Keys.CONTROL,'a')全选
send_keys(Keys.CONTROL,'c')复制
send_keys(Keys.CONTROL,'x')剪切
send_keys(Keys.CONTROL,'v')粘贴
8.嵌入页面
switch.to.frame()方法获取frame中嵌入的页面,对那个页面里的元素进行定位。
switch.to.frame()方法的参数为frame的id或者name,也就是说,使用方法是:
browser.switch_to.frame(id)
browser.switch_to.frame(name)
退出frame可以使用:
switch_to.parent_frame() #调到上级,多层框架推荐使用
switch_to.defaut_content() #跳出所有,一层框架推荐使用
9.登录案例
输入用户名,密码
1.进入登录页面
driver.get('登录.html')
2.找到用户名,密码输入框
text_uname = driver.find_element(By.ID ' ...... ')
text_password = driver.find_element(By.ID '...... ')
3.在输入框中输入信息
text_uname.send_keys('admin')
text_password.send_keys('123456')
4.点击登录
btn_login = driver.find_element
5.进入主页
tip_user = driver.find_element(By.XPATH,'.....')
10.多窗口处理
current_window_handle #获得当前窗口句柄
window_handles #获得所有窗口的句柄
句柄:是系统分配给窗口唯一标识,跟身份证一样,用句柄就可以找到这个窗口
chrome.switch_to_window(窗口句柄) #处理多窗口之间的切换
11.处理异常
try:
代码块
except:
处理异常
finally:
最终的处理
#通常异常处理中会对结果截屏,可以使用:
get_screenshot_as_file('图片保存位置')
#注:只支持png格式图片
12.等待时间
强制等待
time.sleep()
隐性等待
driver.implicitly_wait()
在这段代码后面的元素定位,都会等待10秒,如果元素10秒内出现,则直接进行下面的代码,不再等待。
优点:
1.比sleep更灵活,元素出现后就不再等待了
2.作用于全局所有等位元素的位置,sleep只作用于改行代码
缺点:
如果有不存在的元素,会一直等待时间结束后,才会报错,拖慢了程序运行的速度。
13.unittest 测试框架(4+1)
Testcase 测试用例 , TestSuite测试套件 绞手架 Runner执行器
class TestClass(unittest,testcase):
#初始化方法
def setUp(self):
pass
#测试方法,方法的命名以test开头,方法不能有self之外的参数
def test_somthing(self,param1):
pass
#结束方法
def tearDown(self);
pass
#调用测试用例
#实例化测试用例的工作不需要我们自己手写,而是由unittest来实现
#需要通过调用unittest.main()方法,框架会实例化测试用例,并指定以test开头的方法,并且在执行test开头方法之前调setup,之后调teardown方法。
if __name__ == '__main__':
unittest.main()
#TestSuite测试套件
#将每一个测试用例(class)写成一个模块(.py),工作中每个测试人员会编写多个测试用例,再单独写一个模块,在该模块中使用测试套件,将多个测试用例一起执行。
使用测试套件的步骤:
1.实例化测试套件
suit = unittest.TestSuite()
2.将测试用例添加到测试套件中
suite.addTest(测试用例的实例)
3.运行套件
3.1通过Runner才能够运行测试套件
unittest.TextTestRunner()
3.2通过Runner实例,调用run方法
runner.run(套件用例)