一.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