Selenium进阶部分一
本篇建立在selenium基础部分之上,介绍了如条件判断,常用断言,文件截图操作,cookies操作和ActionChains库等常用操作
附带介绍了XPATH的用法
Selenium常用小操作
上传文件
实现原理:直接定位到上传按钮,即input标签内,然后通过send_keys文件路径
如果有提交按钮,还需点击提交按钮
ele = driver.find_element_by_css_selector('input[type=file]')
ele.send_keys(r'h:\xxx.jpg')
ele.send_keys(u'h:\中文路径\xxx.jpg')
selenium模拟鼠标悬停
# 在开发者工具栏 console 里面执行如下js代码设置2000ms后页面冻结
setTimeout(function(){debugger}, 2000)
下面显示进入百度页面:更多产品:点击图片 -> 进入百度图片页
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
from selenium.webdriver.common.action_chains import ActionChains
ac = ActionChains(driver)
image = "a[href*='image'][name]"
ac.move_to_element(
driver.find_element_by_css_selector("[name='tj_briicon']")
).perform()
WebDriverWait(driver,4,0.5).until(
EC.presence_of_element_located((By.NAME, 'tj_img')))
ac.click(driver.find_element_by_css_selector(image)).perform()
print(driver.title)
截屏
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
# 打开网站
driver.get('https://www.baidu.com/')
# 截屏保存为图片文件
driver.get_screenshot_as_file('1.png')
手机模式
暂略
Selenium Cookies使用
方法介绍
code | description |
get_cookies() | 获得cookie信息 |
add_cookie(cookie_dict) | 添加cookie |
delete_cookie(name) | 删除部分cookie |
delete_all_cookies() | 删除所有的cookie |
add_cookie()用法
使用add_cookie时()必须首先加载首网站,才能将cookie添加至对应网站
driver.get('http://www.xxx.com//login.html')
driver.add_cookie(cookie_dict=cookies)
# 一般情况下单个handle内直接跳转
driver.get('http://www.xxx.com//MainView.html')
- name:cookie的名称
- value:cookie对应的值,动态生成的
- domain:服务器域名
- expiry:Cookie有效终止日期
- path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie
- httpOnly:防脚本攻击
- secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时
ep:WoniuSales为例
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://192.168.1.11:8080/WoniuSales/')
driver.delete_all_cookies()
'''添加cookie时必须遵守标准进行单个添加
理论上建议使用selenium自动化登陆后get_cookies()获取cookie,save后
进行登陆跳过工作,直接debug模式下network获取的cookies键值较少时可以直接add
'''
# driver.add_cookie({'name':'JSESSIONID','value':'BA475011E849E33E20D7B2664897EB6E'})
# driver.add_cookie({'name':'_jfinal_captcha','value':'1fc2acf383514fcc89d9b5566539e19c'})
# driver.add_cookie({'name':'username','value':'admin'})
# driver.add_cookie({'name':'passwor','value':'admin'})
# driver.get('http://192.168.1.11:8080/WoniuSales/sell')
driver.find_element_by_css_selector('input#username').send_keys('admin')
driver.find_element_by_css_selector('input#password').send_keys('admin')
driver.find_element_by_css_selector('input#verifycode').send_keys('0000')
driver.find_element_by_css_selector('button[class*=form]').click()
print('----------------------')
cookie = driver.get_cookies()
print(type(cookie))
print(cookie[0]['expiry'])
EC条件判断与webdriverwait综合使用
time.sleep()与implicitly_wait()的等待方式这里不赘述
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
以上为常用一起出现的三个库的导入路径
- WebDriverWait(self.driver,timee_all,time_seq),self.driver表示webdriver对象,time_all表示等待总时长,time_seq表示间隔尝试时间,一般与until结合使用
- By.CSS_SELECTOR()等与find_element_by_css_selector等相似
- 一般 expected_conditions as EC使用
这里简单列举了一些常用的EC句柄
- element_located_selection_state_to_be(locator,state):判断一个元素的状态是否是给定的选择状态
第一个传入参数是一个定位器,定位器是一个元组(by,path);第二个传入参数表示期望的元素状态,True表示选中状态,Flase表示未选中
#element_located_selection_state_to_be():判断一个元素的状态是否是给定的选择状态
result=WebDriverWait(driver,10).until(expected_conditions.element_located_selection_state_to_be((By.ID,'kw'),True))
- element_selection_state_to_be(driverObject,state):判断给定的元素是否被选中
第一个传入参数是一个webdriver对象,第二个参数是期望的元素的状态,True表示选中状态,Flase表示未选中
#element_selection_state_to_be():判断给定的元素是否被选中
result=WebDriverWait(driver,10).until(expected_conditions.element_selection_state_to_be((driver.find_element_by_id('kw')),True))
- element_to_be_selected():期望某个元素处于选中状态传入参数是一个webdriver实例对象
#element_to_be_selected():期望某个元素处于选中状态
result=WebDriverWait(driver,10).until(expected_conditions.element_to_be_selected(driver.find_element_by_id('kw')))
- element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase
#element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase
result=WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable(driver.find_element_by_id('hh')))
- frame_to_be_available_and_switch_to_it(parm):判断frame是否可用,如果可用返回True并切入到该frame,参数parm可以是定位器locator(by,path)组成的元组,或者定位方式:id、name、index(frame在页面上索引号),或者webelement对象。
#frame_to_be_available_and_switch_to_it():判断frame是否可用
#传入ID值‘kk’
result1=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(By.ID,'kw'))
#传入frame的webelement对象
result2=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_id('kw')))
#传入frame在页面中索引号
result3=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(1))
总结:
感谢每一个认真阅读我文章的人!!!
我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。