一.selenium实现自动化的原理
selenium的核心是webdriver
webdriver是按照client-------server设计原理设计
client简单来说就是我们写的代码,以http请求的方式发给server端
server端接收请求,执行相应的操作,并返回给client端, 这里的server实际上就是我们下载的对应版本浏览器的驱动 webdriver(我们常用的webdrivers 有chromedriver,IEdriver,firefoxdriver)
原理小结:
客户端(我们写的代码)通过调用selenium包中的一些方法(函数)向javascript写的webdriver服务端发送请求,webdriver来操作页面元素,模拟人手工测试(点击,输入,滑动,切换窗口)的过程
所以我们使用时需要导包,然后需要了解selenium已经封装好的方法,调用这些方法,让方法调用底层代码写的方法来向webdriver发送请求,让webdriver去操作页面元素,来代替我们手工操作,将重复性工作固化,然后我们再使用jenkins出发定时任务去执行代码,即可代替我们重复性工作
二.常用控件定位
1.定位文本框,密码框
image.png
2.定位按钮,链接
先使用web元素定位定位到按钮或链接,再使用click() 方法进行点击
image.png
获取元素的文本 (常用来断言,用例执行完后检查是否通过)
方法: 先使用web元素定位,再使用.text方法 ,注意 text方法后没有()
image.png
获取元素的属性 (目前不知道有啥用)
切换窗口
image.png
获取窗口title (常用来断言)
image.png
7.窗口最大化
image.png
窗口刷新 (基本不用,用的时候再看)
返回上一步(基本不用,无实用性,不用看)
获取窗口的尺寸
关闭浏览器
(1)关闭当前窗口
driver.close()
(2)关闭浏览器(所有窗口)
driver.quit()
获取下拉框中的选项 (必用)
image.png
鼠标悬停 (重点) 【 RF中的mouse over. 鼠标悬停后才有下拉框,鼠标移走后,显示的内容消失】
引入类: ActionChains()
from selenium.webdriver.common.action_chains import ActionChains
实例方法: move_to_element()
鼠标要移动到悬停位置, 首先得定位到整个位置
mouse =driver.find_element_by_link_text("设置")
然后使用
ActionChains(driver).move_to_element(mouse).perform()
ActionChains是个类,ActionChains()构造方法,将driver对象传入
alert弹窗 (警告型弹框,只有确认按钮)
image.png
定位方法
driver.switch_to.alert 注意alert后没有()
此时已经切换到了alert弹窗上,此时整个alter弹窗是一个对象,使用t.text可以返回的弹窗上显示的文本值并打印
将driver.switch_to.alert对象赋值给变量t=driver.switch_to.alert
最后调用弹窗对象的accept()方法 点击alert弹窗的确定按钮,如下
image.png
点击取消按钮,使用 t.dismiss()方法
确认型弹框 (有确定,有取消)
点击确定按钮,使用t.accept()方法
点击取消按钮,使用 t.dismiss()方法
image.png
输入型弹框
输入型弹框如下
image.png可以输入内容,弹框中也有默认内容
frame框架处理 (重点,曾经面试问过)
定位的元素在frame/iframe框里面,定位时要先进入frame框里面,再进行元素定位
进入frame框的方法 switch_to_frame()
原本在frame/iframe框里面,现在要定位frame框外的元素,需要先退出frame/iframe再进行定位
退出frame框的方法switch_to_defalut_content()
注意: 定位的frame中包含frame时,需要多次 switch_to_frame() , 从外一层层进入,退出的时候从里使用switch_to_defalut_content(),退出到最外一层
常见的用id,xpath没有定位到, 异常报元素没有被找到, 就看一下上一层有没有frame/iframe框
image.png
定位frame/iframe框的方法 【frame,iframe理解为一个东西,叫法不一样】
可以传入 index 或者 name(frame名称) 或者 frame的定位信息(比如ID)
image.png
滚动条处理
滚动条是由javascript写的
方法:execute_script()
移动滚动条的javascript代码
js = “window.scrollTo(0,2000)” #向下滚动2000px , 0代表顶端
driver.execute_script(js) #执行脚本
image.png