web自动化02-鼠标操作-键盘操作-元素等待-下拉选择框-弹出框-滚动条-frame切换-多窗口切换-窗口截图-cookie处理
-
导包
from selenium.webdriver import ActionChains
-
实例化鼠标对象
action = ActionChains(driver)
-
调用鼠标方法
#鼠标右击
action.context_click()
#鼠标双击
action.double_click()
#鼠标拖拽,例如登录时经常用到将元素拖到到指定位置进行验证,soure:表示被拖动元素对象
#,target表示目标元素
action.drag_and_drop(soure,target)
#悬浮操作,element表示悬浮的元素对象
action.move_to_element(element)-
注意点:调用鼠标方法,还不会执行鼠标操作,只是将需要进行的操作指令存储到action鼠标对象内
-
-
执行鼠标操作
#执行鼠标操作
#执行perform()方法后才会执行鼠标操作
#注意:在执行鼠标操作脚本时不能手工移动鼠标
action.perform()
键盘操作
-
from selenium.webdriver.common.keys import Keys
-
执行键盘操作方法
#Keys类封装了除了26个字母和数字键以外的所有键符 #调用send_keys方法,直接调用Keys里面指定键符做为参数来执行键盘操作 #1.单个按键操作 element.send_keys(Keys.BACK_SPACE) #删除键 element.send_keys(Keys.SPACE) #空格键 #2.组合按键操作 element.send_keys(Keys.CTRL,'a') #选中 element.send_keys(Keys.CTRL,'c') #复制
隐示等待
#方法,timeout表示的最大超时时长,单位秒 driver.implicitly_wait(timeout) """ 特点: 1.全局只需要设置一次 2.作用于所有元素定位 3.未找到元素抛出异常:NoSuchElementException """
显示等待
#导包 from selenium.webdriver.support.wait import WebdriverWait #使用方法 #1.timeout:表示超时时间 #2.poll_frequency:表示间隔时间,默认为0.5s #3.util:直到...时,下面表示直到找到id为userA的元素时 WebDriverWait(driver,timeout,poll_frequency).util(lambda x:x.find_element_by_id('userA')) """ 特点: 1.针对单个元素生效 2.封装在WedDriverWait类中,需要导包 3.未找到元素抛出异常:TimeOutException """
导包
实例化下拉框对象
执行下拉框选中的操作
from selenium.webdriver.support.select import Select #element为html内所要操作的<select>下拉框标签元素 select = Select(element) #通过索引选择对应选项 #注意:index从0开始计数 select.select_by_index(index) #通过选项元素的value值选择对应选项 select.select_by_value(value) #通过选项元素的文本信息选择对应选项 select.select_by_visiable_text(text)
-
<!--alert 警告框:包含确定按钮和提示信息 -->
<input type=“button” onclick=“alert(‘我是警告框’)” value="alert"/>
<!--confirm 确认框:包含确认按钮和取消按钮和提示信息-->
<input type=“button” onclick=“confirm(‘我是确认框’)” value="confirm"/>
<!--prompt 提示框:包含确认按钮和取消按钮、提示信息以及信息输入框-->
<input type=“button” onclick=“prompt(‘我是提示框’)” value="prompt"/>-
弹出框处理方法
#获取弹出框对象
alert = driver.switch_to.alert
#调用弹出框对象方法
#返回弹出框信息
alert.text
#接受对话框
alert.accept()
#取消度画框
alert.dissmiss()
"""
注意:
1.上面的处理方法对:alert/confirm/prompt三种弹出框通用
2.alert没有取消按钮,但alert.dissmiss()对其同样生效
""" -
-
滚动条操作
#1.使用js的方法控制滚动条
js = "window.scrollTo(0,1000)"
#2.selenium执行JavaScript脚本
driver.execute_script(js)
"""
注意:
1.selenium本身没有提供直接操作滚动条的方法,但是js可以控制滚动条操作
2.selenium提供了执行js的方法
"""
frame切换
-
frame:Html页面中的一种框架,主要作用是在当前页面中指定区域显示另外一个页面
-
frame切换处理方法
#切换frame,frame_reference表示可定位对应frame框架标签的属性:id、name等
driver.switch_to.frame(frame_reference)
#回到默认页面
driver.switch_to.default_content()
"""
在frame中操作其他页面,必须先返回到默认页面才能进行其他操作
"""
多窗口切换
-
句柄:handle,页面窗口唯一识别码
-
切换窗口方法
#获取页面当前句柄
driver.current_window_handle
#获取所有页面句柄
driver.window_handles
"""
注意:获取所有句柄信息返回的一组句柄信息,排序根据页面窗口打开的顺序排序,获取指定的页面句柄添加
对应的索引即可
"""
#跳转指定页面
driver.switch_to.window(handle)
窗口截图
-
窗口截图
#直接调用selenium中的方法即可,imgpath为存放路径
driver.get_screenshot_as_path(imgpath)
#处理图片重复方法,只需要参数化文件名称即可
imgpath = time.strf('%Y%m%D%-%H%M%S%'){}.test.png
"""
注意:
1.图片存放路径必须先创建好,get_screenshot_as_path()方法不自动化创建路径
2.图片格式必须为png
"""
cookie处理
-
处理验证码的几种方式
-
去掉验证码
-
设置万能验证码
-
验证码识别技术
-
记录cookie
-
-
cookie概念
-
-
cookie是有web服务器产生并保存在客户浏览器上的小文本文件,包含了用户一些相关信息
-
cookie数据格式:由键值对组成
-
-
cookie使用过程
-
客户端登录系统向服务器发送登录请求,服务器会根据登录请求数据判断用户身份,验证通过后颁发对应的cookie信息并同请求结果一起返回给客户端。
-
客户端再次请求服务器相关请求数据时,会将cookie一并发送给服务端,服务端判断cookie信息即可判断用户的状态
-
常用场景:
-
记住登录状态
-
游客加入购物车
-
-
-
cookie处理方法
#获取指定cookie信息 name:表示cookie的名称
driver.get_cookie(name)
#获取全部cookie
driver.get_cookies
#添加cookie
#cookie_dict:格式为字典,必须包含name和value键和键值,用来决定cookie必选信息
driver.add_cookie(cookie_dict)
"""
注意:
1.在实际测试过程,如果是采用的cookie技术进行会话跟踪需要确定好对应确认用户信息的cookie是哪个;
2.在谷歌浏览器拷贝cookie信息时需要鼠标三击选择全部信息;
3.多个浏览器同时登录时可能出现都能登录但是cookie不一样的情况,不影响登录
"""
-