selenium主要用来做web自动化,分1.0和2.0两个版本,1.0包括selenium IDE、selenium Grid、selenium Remote Control,2.0在1.0的基础上增加了webdriver
1)selenium IDE 是火狐的一个插件,可以在火狐中录制、回放脚本,并且形成各种语言的脚本文件,在学习中使用的是catalon插件
2)selenium Grid 做测试的并行处理,目前学习中暂未过多接触。
3)selenium RC 用例的编写及运行,是在浏览器中运行js应用,使用浏览器内置的js翻译器来翻译和执行selense命令(selenium的命令集合)
4)selenium webdriver是selenium RC的替代产品,是通过支持原生浏览器驱动来控制浏览器
- 需要把各个浏览器的驱动文件放至Python根目录
- pip install selenium
selenium webdriver
1.元素定位
使用webdriver主要是通过定位页面元素对其进行操作,因此元素的定位是UI自动化测试的重中之重。webdriver常用的元素定位方法有以下:
1)id driver.find_element_by_id('username')
2)name driver.find_element_by_name('kw')
3)xpath driver.find_element_by_xpath("//button[@onclick=\"doLogin('null')\"]")
- /当前节点 //任意节点
- @属性名=属性值 text()='' test前无@
- 组合 driver.find_element_by_xpath("//button[@onclick=' ' and @type=' ']")
- 下标 (//a[text()='新闻'])[2] (//a[text()='新闻'])查出多个,用【2】定位
- . 当前节点 ..上一个节点
2.常用API
- 打开关闭最大化窗口
driver = webdriver.Chrome()
driver.get('http://172.16.1.222:8080/WoniuSales/')
driver.maximize_window()
driver.minimize_window()
driver.close() #关闭窗口
driver.quit() #关闭浏览器
- 前进、后退
driver.back() #后退
driver.forward() #前进
- 鼠标操作
鼠标操作包含在ActionChains中,通过perform()执行操作
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).contex_click(element).perform #element处右击
double_click() #双击 drag_and_drop() #拖动 move_to_element() #悬停
- 键盘操作
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("kw").send_keys(Keys.CONTROLL,'a') #ctr+A
Keys.BACK_SPACE #删除 Keys.SPACE #空格 。。。。。
- 滚动条
滚动条不属于页面元素,可通过JS控制
scroll_bar = "var bar = document.documentElement.scrollTop = 100000" #scrollTop =0,滚动条在最上方,数值控制位置
driver.execute_script(scroll_bar)
- 元素操作
driver.find_element_by_id('username').click() #点击
driver.find_element_by_id('username').clear() #清除
driver.find_element_by_id('username').send_keys("内容") #模拟键盘输入
driver.find_element_by_id('username').text #获取元素的文本
driver.find_element_by_id('username').is_displayed() #是判断存在的元素是否显示,而不是元素是否存在!
- 设置等待时间
①强制等待
from time import sleep
sleep(3) #执行到这一步时强制等待3秒
②隐式等待
driver.implicitly_wait(30) #相当于为所有的元素设置了一个全局的等待时间,如果找到了就不等待,没找到就等待,30秒还没找打就报错
③显式等待
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver,timeout,frequency) #每隔frequency查找一次,总共timeout秒,找到就继续,没找到等下一个间隔。
- alert/confirm/prompt
- 多窗口
handle = driver.current_window_handle
driver.switch_to().window(handle)
- 添加cookie,可绕过登录
cookie是网站为了辨别用户身份、进行session追踪而存储在用户本地终端上的数据,也可理解为浏览器缓存。
driver = webdriver.Chrome() driver.get("http://172.16.1.222:8080/WoniuSales/") driver.add_cookie({'name':'username','value':'admin'}) driver.add_cookie({'name':'password','value':'admin'}) driver.get("http://172.16.1.222:8080/WoniuSales/") #不点登录击登录可以直接进入登录后的界面