赞
踩
1、QTP:主要做自动化回归有图形化界面,用VB语言实现
2、Rational Robot :做配置和回归的自动化测试
3、jmeter:Apache下的一个性能和部分接口测试工具,轻量级,用JAVA实现
4、Loadrunner:性能测试工具,比较常用
5、Appium:做APP自动化测试的一个工具
6、postman、soupui:做接口自动化的测试工具
7、Selenium:web端的功能自动化(重点学习)
注:自动化测试的时机是功能相对稳定,很好理解,有功能才能去测,UI自动化是在前端完成、接口自动化是在后端完成
Selenium并不是一个工具,而是一个工具集;比如Selenium1就包括三个,Selenium IDE(有图形化)、SeleniumRC(远程控制)和SeleniumGRID(分布式测试)Selenium2:重点加入了浏览器驱动Web Driver,WebDriver工作原理就像出租车司机,可以去驱动出租车,驱动的方式就是乘车告诉给他的路线,他照着开,乘客就相当于编写的自动化脚本
Selenium3:增加了一些浏览器的原生驱动,比如edge,safari
–免费,这对于咱这穷鬼很友好,QTP 就是收费的
–小巧,对于不同的语言它只是一个包而已,Loadrunner的安装包就有4个G
–支持多语言这也是最重要的一点,不管你以前更熟悉C、java、ruby、python、或都是C# ,你都 可以通过selenium 完成自动化测试,而QTP 只支持VB
–支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome
–支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器执行,相当于分发机的功能
单纯的讲,自动化测试的具体实现,应该是包含下面七个过程的。
①减少重复测试的时间,实现快速回归测试
②创建优良可靠的测试过程,减少人为错误
③可以运行更多更繁琐的测试
④可以执行一些手工测试困难或不可能进行的测试
⑤更好的利用资源,节省人力
⑥测试具有一致性和重复性,脚本的重复性
先来看一个简单的脚本,对自动化脚本建立一个基础认识
#后面为代码的详细解释
# coding = utf-8 防止乱码,可加可不加 from selenium import webdriver #要想使用selenium 的webdriver 里的函数,首先把包导进来 import time browser = webdriver.Firefox() #webdriver.我们想操控的浏览器,这个可以换 time.sleep(3) #等待三秒 browser.get("http://www.baidu.com") #在火狐浏览器内打开百度页面 time.sleep(3) browser.find_element_by_id("kw").send_keys("selenium") #元素定位方式。下面会说 time.sleep(3) browser.find_element_by_id("su").click browser.quit() #操作完调用quit关闭掉,不然桌面会打开好多浏览器页面
元素定位在自动化测试中非常重要,这就比如你找不到元素你拿什么测,所以这里也是自动化测试的重点,下面介绍几种元素定位方式
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
①id和name定位:id 和name 是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且在对控件的id 和name 命名时一般使其有意义也会取不同的名字。
#通过id 方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name 方式定位
browser.find_element_by_name("wd").send_keys("selenium")
②tag name 和class name定位:百度输入框的属性信息中不单单只有id 和name 两个属性, 比如class 和tag name(标签名),input 就是一个标签的名字,可以通过find_element_by_tag_name(“input”) 函数来定位。class=“s_ipt”,通过find_element_by_class_name(“s_ipt”)函数捕获百度输入框。
#通过tag name 方式定位
browser.find_element_by_tag_name("input").send_keys("selenium") 不能成功,因为input太多了不唯一。
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
③XPath定位XPath可以看做定位的杀手锏,它是可以唯一定位的,是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用户可是使用,这种强大语言在web 应用中定位元素。
#通过xphan 方式定位
browser.find_element_by_xpath("//[@id='kw']").send_keys("selenium")
#coding=utf-8 from selenium import webdriver import time browser = webdriver.Chrome() browser.get("http://www.baidu.com") #########百度输入框的定位方式########## #通过id 方式定位 browser.find_element_by_id("kw").send_keys("selenium") #通过name 方式定位 browser.find_element_by_name("wd").send_keys("selenium") #通过tag name 方式定位 browser.find_element_by_tag_name("input").send_keys("selenium") 不能成功,因为input太多了不唯一。 #通过class name 方式定位 browser.find_element_by_class_name("s_ipt").send_keys("selenium") #通过CSS 方式定位 browser.find_element_by_css_selector("#kw").send_keys("selenium") #通过xphan 方式定位 browser.find_element_by_xpath("//[@id='kw']").send_keys("selenium") ############################################ browser.find_element_by_id("su").click() time.sleep(3) browser.quit()
④link定位:有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link text来定位
#coding=utf-8
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_link_text("hao123").click()
browser.quit()
⑤部分链接定位,这个有时候也会用到,我还没有想到很好的用处。拿上面的例子,我可以只用链接的一部分文字进行匹配:
#coding=utf-8
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_partial_link_text("hao").click()
browser.quit()
⑥CSS定位:
#通过CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
一般来说,webdriver 中比较常用的操作对象的方法有下面几个:
click :点击对象
send_keys :在对象上模拟按键输入
clear :清除对象的内容,如果可以的话
submit :提交表单
text :用于获取元素的文本信息
driver.find_element_by_id("su").submit()
driver.find_element_by_id("kw").send_keys("selenium").click
driver.find_element_by_id("su").submit()
data=driver.find_element_by_id("cp").text
print(data)
import time
time.sleep(3)
driver.quit()
我们知道调用启动的浏览器不是全屏的,这样不会影响脚本的执行,但是有时候会影响我们“观看”脚本的执行。
①浏览器最大化,也就是放全屏:maximize_window()
browser.maximize_window() #将浏览器最大化显示
②设置浏览器宽和高:set_window_size
#参数数字为像素点
print "设置浏览器宽480、高800显示"
browser.set_window_size(480, 800)
③操作浏览器的前进后退:browser.back()、browser.forward()
#访问新闻页面
second_url='http://news.baidu.com'
print "now access %s" %(second_url)
browser.get(second_url)
time.sleep(2)
#返回(后退)到百度首页
print "back to %s "%(first_url)
browser.back()
控制浏览器滚动条
execute_script(script, *args),在当前窗口/框架同步执行javaScript
#前进到新闻页
print "forward to %s"%(second_url)
browser.forward()
④控制浏览器滚动条
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
键盘按键用法
driver.find_element_by_id("account").send_keys(Keys.TAB)
driver.find_element_by_name("password").send_keys(Keys.ENTER)
键盘组和用法
#ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)
#ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
time.sleep(3)
就是我们平时在鼠标上进行的简单操作
ActionChains 类下的这些方法需要掌握
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(menu) 移动:移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素
perform():执行所有存储的行为
#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Chrome() driver.get("http://news.baidu.com") qqq =driver.find_element_by_xpath(".//*[@id='s_btn_wr']") ActionChains(driver).context_click(qqq).perform() #右键 ActionChains(driver).double_click(qqq).perform() #双击 #定位元素的原位置 element = driver.find_element_by_id("s_btn_wr") #定位元素要移动到的目标位置 target = driver.find_element_by_class_name("btn") #执行元素的移动操作 ActionChains(driver).drag_and_drop(element, target).perform()
对于一个现代的web 应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。
有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame 中,
seelnium webdriver 提供了一个switch_to_frame 方法,可以很轻松的来解决这个问题。
#先找到到ifrome1(id = f1)
browser.switch_to_frame("f1")
#再找到其下面的ifrome2(id =f2)
browser.switch_to_frame("f2")
#下面就可以正常的操作元素了
#coding=utf-8
from selenium import webdriver
import os,time
driver = webdriver.Chrome()
#脚本要与upload_file.html 同一目录
file_path = 'file:///' + os.path.abspath('upload.html')
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\PycharmProjects\\test\\upload.txt')
time.sleep(2)
driver.quit()
text 返回alert/confirm/prompt 中的文字信息
accept 点击确认按钮
dismiss 点击取消按钮,如果有的话
send_keys 输入值,这个alert\confirm 没有对话筐就不用处理了,不然会报错
注意:switch_to_alert()只能处理原生的alert
#接受警告信息
alert = dr.switch_to_alert()
alert.accept()
#得到文本信息打印
alert = dr.switch_to_alert()
print alert.text
#取消对话框(如果有的话)
alert = dr.switch_to_alert()
alert.dismiss()
#输入值
alert = dr.switch_to_alert()
alert.send_keys("hello word")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。