Selenium自动化之WebDriver API
看了虫师的《自动化测试实战》一书,学到了很多,非常感谢。特此记录下学习笔记,供以后学习使用。
一. 元素定位
1.find_element_by_id(); id定位
2.find_element_by_name(); name定位
3.find_element_by_class_name(); class属性定位
4.find_element_by_tag_name(); tag属性定位
5.find_element_by_link_text(); 元素标签之前的文本信息来定位
6.find_element_by_partial_link_text(); 取文本链接的一部分来定位
7.find_element_by_xpath();
其中xpath有多种定位策略:
①绝对路径:find_element_by_xpath("html/body/div[2]/div[2]/div[3]/div[2]/form/input[1]");
②元素属性:find_element_by_xpath("//input[@id=‘qwe‘]");
find_element_by_xpath("//input[@name=‘qwe‘]");
find_element_by_xpath("//input[@class=‘qwe‘]");
find_element_by_xpath("//*[@id=‘qwe‘]");
③层级属性:find_element_by_xpath("//span[@class=‘qwe‘]/input");
find_element_by_xpath("//form[@id=‘qwe‘]/span[2]/input");
④运算逻辑:find_element_by_xpath("//input[@id=‘qwe‘ and @class=‘qwer‘]/span/input");
8.find_element_by_css_selector(); css选择器定位
其中css也有多种策略:
①class属性:find_element_by_css_selector(".qwe");
②id属性: find_element_by_css_selector("#qwe");
③标签名: find_element_by_css_selector("input");
A.父子关系: find_element_by_css_selector("span>input");
B.属性定位: find_element_by_css_selector(‘[type="submit"]‘);
C.组合定位: find_element_by_css_selector("form.fm>span>input>input.qwe");
9.BY元素定位
以上提到的8种定位方法,webdriver还提供了另一套写法,即统一调用find_element()方法,通过BY来声明定位的方法,并且传入对应定位方法的定位参数。
使用BY之前需要插入BY类:
from selenium.webdriver.common.by import By
find_element(BY.ID,"qwe");
find_element(BY.NAME,"qwe");
find_element(BY.CLASS_NAME,"qwe");
find_element(BY.TAG_NAME,"qwe");
find_element(BY.LINK_TEXT,"某某测试部");
find_element(BY.PARTIAL_LINK_TEXT,"测试部");
find_element(BY.XPATH,"//* [@id=‘qwe‘]");
find_element(BY.CSS_CELECTOR," span>input ");
二.控制浏览器
1.控制浏览器窗口大小
①set_window_size();
如set_window_size(640,480); 即宽640,高480
②maximize_window(); 窗口最大化,不需要参数,直接使用
2.控制浏览器进退、前进
back(); 返回
forwar(); 前进
如 driver.back(); 其中driver=webdriver.Chrome()
3.模拟浏览器刷新
refresh(); 如driver.refresh()类似F5
4.简单元素操作
①clear(); 清除文本
②send_keys(*value); 模拟按键输入
③click(); 单击元素
举例:
driver.find_element_by_id("qwe").clear()
driver.find_element_by_id("qwe").send_keys("zhang")
driver.find_element_by_id("login").click()
5.webelement接口常用方法
size:返回元素的尺寸
text:获取元素的文本
get_attributte(name):获得属性
is_displayed():设置改元素是否用户可见
举例:
size=driver.find_element_by_id("qwe").size 获取输入框的尺寸
text=driver.find_element_by_id("qwe").text 获取文本信息
attributte = driver.find_element_by_id("qwe").get_ attributte(‘type‘) 可以是id、name、type或其他任意属性
result= driver.find_element_by_id("qwe"). is_displayed() 返回元素的结果是否可见,返回结果为Ture或者False
5.鼠标事件
perform():
执行所有ActionChains中存储的行为
context_click():
右击
double_click():
双击
drag_and_drop(element,
target
move_to_element():
鼠标悬停
举例:
①rom
selenium.webdriver.common.action_chains import ActionChains 先引入ActionChains类
driver =
webdriver.Chrome()
driver.get("http://www.baidu.com")
#...
#定位到要右击的元素
right_click
= driver.find_element_by_id("qwe")
#对定位到的元素执行鼠标右击操作
ActionChains(driver).context_click(right_click).perform()
说明:
ActionChains(driver):调用这个类,将浏览器驱动driver作为参数传入
context_click(right_click):模拟邮件操作,在使用时需要指定元素定位
perfom():将指定所有ActionChains中存储的行为。
②above=driver.find_element_by_id("qwer")
ActionChains(driver).move_to_element(above).perfom()
其他方法类似
6.键盘事件
Keys类提供了键盘上所有的按键方法
from
selenium.webdriver.common.keys import Keys
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‘) 粘贴
send_keys(Keys.F1)
...
send_keys(Keys.F12) F1-F12
7.获得验证信息
title,
URL, text
举例:
now_url=driver.current_url
获取当前页面URL
title=driver.title
获取当前页面title
text前边已经提及到,不赘述
8.设置元素等待
①显式等待:WebDriverWait(driver,poll_fequency=0.5,ignored_exceptions=None)
②隐式等待:driver.implicitly_wait(time)
time可自定义
③sleep休眠:sleep(time) time可自定义
9.定位一组元素
在之前定位单个元素的的element后加s
find_elements_by_id();
find_elements_by_name();
find_elements_by_class_name();
find_elements_by_tag_name();
find_elements_by_link_text();
find_elements_by_partial_link_text();
find_elements_by_xpath();
find_elements_by_css_selector();
10.多表单切换
driver.swtich_to.frame()
11.多窗口切换
driver.switch_to.widow() 用于切换到相应的窗口
current_window_handle 获取当前窗口句柄
window_handles 返回所有窗口的句柄到当前会话
12.警告框处理
text:返回
alert/confirm/prompt中的文字信息
accept():
接受现有警告框
dismiss():
解散现有警告框
send_keys(keysToSend):
发送文本至警告框
13.上传文件
普通上传:将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器
插件上传:指基于Flash,JavaScript或Ajax等技术实现上传功能
①send_keys()
如:
from selenium import webdriver
import os
driver = webdriver.Chrome()
file_path=‘file:///‘ + os.path.abspath(‘upfile.html‘)
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys(‘D:\\upload_file.txt‘)
driver.quit()
②AutoIt实现上传 下载使用http://www.autoitscript.com/site/
14.下载文件
from selenium import webdriver
import os
fp=webdriver.Firefoxprofile()
fp.set_preference("browser.download.folderList",2)#0是默认路径,2是指定路径
fp.set_preference("browser.download.manager.showWhenStarting",False)#是否显示开始
fp.set_preference("browser.download.dir",os.getcwd())#用于指定所下载的文件的目录
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件的类型
driver=webdriver.Firefox(firefox_profile=fp)
driver.get("http://pypi.Python.org/pypi/selenium")
driver.find_element_by_partial_link_text("selenium-2").click()
15.操作Cookie
WebDriver操作cookie的方法:
get_cookies(): 获取所有的cookie信息
get_cookie(name): 返回字典的key为“name”的cookie信息
add_cookie(cookie_dict):添加cookie。cookie_dict为字典对象,必须有name,value值
delete_cookie(name,optionsString):删除cookie信息
delete_all_cookies():删除所有的cookie信息
16.调用JavaScipt
调整浏览器滚动条位置
window.scrollTo(左边距,上边距)
17.处理HTML5的视频播放
load(),play(), pause() 加载,播放,暂停
18.窗口截图
driver.get_screenshot_as_file("D:\\xxxxx")#截取当前窗口,并指定截图图片的保存位置
19.关闭窗口
quit():退出相关程序和关闭所有窗口;
close():关闭当前窗口
20.验证码的处理
①去掉验证码
②设置万能验证码
③验证码识别技术
④记录cookie