这里就是看完《Selenium2+Python自动化测试实战》的一些笔记,没有任何实际意义,仅做记录及分享。
find_element_by_id() 通过id定位
find_element_by_name() 通过name定位
find_element_by_class_name() 通过class的name去定位
find_element_by_tag_name() 通过标签定位tag如input
find_element_by_link_text() 用于定位文本链接<a >
find_element_by_partial_link_text() 用于定位文本链接,只要一部分信息就可以识别
find_element_by_xpath() 绝对路径定位
find_element_by_css_selector() css选择器定位
定位时也可以使用逻辑与算法,即找到id和name都等于什么的元素
控制浏览器
driver.get(url) 打开某个url路径
driver.set_window_size(480,800) 设置浏览器的宽480高800显示
driver.maximize_window() 让浏览器全屏模式下执行
driver.back() 浏览器后退
driver.forward() 浏览器前进
操作元素
clear() 清除文本
send_keys(*value) 在元素上模拟按键输入
click() 单击元素
submit() 没有提交按钮时,用于提交表单
获取返回值
size() 返回元素的尺寸
text() 获取元素的文本
get_attribute(name) 获取属性值
is_displayes() 设置该元素是否用户可见
鼠标事件
perform() 执行所有ActionChains中存储的行为
context_click() 右击
double_click() 双击
drag_and_drop(a,b) 拖动a元素到b元素的位置
move_to_element() 鼠标悬停
eg:
#导入模块
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get('http:www.baidu.com')
#定位到需要右击的元素
right_click = driver.find_element_by_id('xx')
#调用ActionChains方法,将浏览器驱动driver作为参数传入,右击方法,并且perform用于提交这个动作
ActionChains(driver).context_click(right_click).perform()
键盘事件:
#引入keys模块
from selenium.webdriver.common.hyes import Keys
send_keys('str') 输入内容
send_keys(Keys.BACK_SPACE) 删除一个字符
send_keys(Keys.SPACE) 输入空格
send_keys(u'教程') 输入中文
send_keys(Keys.CONTROL,'a') 全选输入框内容
send_keys(Keys.CONTROL,'x') 剪切输入框内容
send_keys(Keys.CONTROL,'v') 黏贴内容到输框
send_keys(Keys.ENTER) 回车按钮
send_keys(Keys.ESCAPE) 退出按钮
send_keys(Keys.F1) F1按键
获取验证信息:
driver.title 返回当前页面的title
driver.now_current_url 返回当前页面的url
设置元素等待:
element = WebDriverWait(driver,5,0.5).until(expected_conditions.presence_of_element_located(By.ID,'kw'))
显示等待,在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exception=None) 四个参数分别是,驱动程序,最长超时时间,休眠时间间隔,超时异常信息
until(method,message='') 调用该方法提供的驱动程序作为一个参数,直到返回true
until_not(method.message='') 调用该方法提供的驱动程序作为一个参数,指导返回False
expected_conditions.presence_of_element_located 元素是否可见
隐式等待
driver = webdriver.Firefox()
driver.implicitly_wait(10) #隐式等待方法
这个驱动后续的定位元素 对每一个元素都会一个有一个等待的过程,超过10s没有等到这个元素即抛出异常
sleep休眠方法
time.sleep(5) 针对某个页面加载进行等待5s
定位一组元素:
find_elements_by_id() 只是在定位一个元素的后面加s,同样有8种定位方法,返回一组元素
这组元素.pop()/pop(-1) 这组元素的最后一个元素 pop(0) 第一个元素
多表单切换:
在Web中遇到 frame嵌套页面时,需要切换到对应的frame才能进行元素定位
switch_to_frame('if') 切换到id或者name为 if的页面
如果没有id或者name,可以先用其他方法定位frame元素,再
driver.swith_to_frame('定位到的元素')
switch_to_default_context() 返回到上一层表单,默认返回到与它最近的switch_to_frame()方法中
多窗口切换:
switch_to_window()
eg:先获取当前窗口的句柄,然后再弹出新窗口时,获取所有窗口的句柄列表,循环做个判断,切换到不是旧窗口的句柄中就可以实现
handle = driver.current_window_handle 当前窗口的句柄
handles = driver.window_handles 当前驱动的所有句柄
警告框处理:
switch_to_alert() 接收弹出框
text 返回弹出框的文字信息
accept 点击确认按钮
dismiss 点击取消按钮
send_keys 输入值
文件上传:
send_keys,通过send_keys传入本地文件路径
Autolt实现上传(目前看没啥用,后续再说)
文件下载
操作Cookie
get_cookies() 获取所有cookie
get_cookie(name) 获取特定的cookie信息
add_cookie(cookie_dict) 添加cookie,传入一个字典
delete_cookie(name) 删除特定cookie
delete_all_cookies() 删除所有cookie
调用JavaScript,执行js语言
js_ = 'var q = document.documentElement.scrollTop=0"
driver.execute_script(js_)
窗口截图:
driver.get_screenshot_as_file('D:\\baidu_error,jpg') 后续应该要按时间来截图
关闭窗口:
quit() 退出浏览器驱动,关闭所有窗口
close() 关闭当前窗口
处理验证码:
让开发 去掉验证码、或者设置一个万能码或者通过cookie绕过验证码
打印客户端向服务器发送的请求:
logging.basicConfig(level=logging.DEBUG)
OK,Selenium基础就到这里,后续会有项目应用相关内容,即踩到的坑和后续的一些想法~~~