selenium进阶

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))

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值