Selenium自动化框架理论总结
一、自动化原理
1、结构图:
自动化程序(selenium客户端库) <--> 浏览器驱动器 <--> 浏览器
其中自动化程序通过http协议与浏览器驱动器进行交互
2、安装:
(1)selenium客户端库:pip install selenium
(2)浏览器驱动器:需要额外下载,实际上就是一个exe文件,不需要其他操作
3、基本代码
from selenium import webdriver
#根据驱动器创建一个webdriver对象,并启动浏览器
wd=webdriver.Chorme('浏览器的路径/驱动器文件')# Chorme Firefox Ie Safari Edge
#利用wd对元素进行定位操作、对窗口等进行操作
wd.get('url') #请求访问对应网页
wd.quit() #关闭浏览器窗口
二、元素定位的几种常用方法
下面代码中的wd可以替换为WebElement实例,查找范围由原来的整个页面更改为对应元素的内部;比较特殊的xpath,当使用webelement时,参数前一定要加上.开头
1、id
elements=wd.find_elements_by_id('id值') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_id('值') #返回第一个符合条件的元素;如无,抛出异常
2、class
elements=wd.find_elements_by_class_name('class值') #以列表的形式返回所有符合元素;若无,空列表
elements=wd.find_element_by_class_name('class值') #返回第一个符合条件的元素;如无,抛出异常
3、name
elements=wd.find_elements_by_name('值') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_name('值') #返回第一个符合条件的元素;如无,抛出异常
4、tag
elements=wd.find_elements_by_tag_name('值') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_tag_name('值') #返回第一个符合条件的元素;如无,抛出异常
5、css选择器
elements=wd.find_elements_by_css_selector('参数') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_css_selector('参数') #返回第一个符合条件的元素;如无,抛出异常
(1)按照tag 参数:标签名
(2)按照属性
- id 参数:#id值
- class 参数:.class值
- 其他属性 参数: [属性名=’属性值‘] ,其中属性值的引号可省略
补充:属性值部分可以进行三总模糊查询,分别如下所示:
*= (包含) ^= (以...开头) $= (以...结尾)
(3)按照次序选择子节点 参数为 :nth-child(m) , 本身父元素的第m个子节点
参数为 :nth-last-child(m), 本身父节点的倒数第m个子节点
(4)按照类型选择子节点 参数为 :nth-of-type(m),本身父元素的第m个类型的子节点
参数为 :nth-last-of-type(m), 本身父节点的倒数第m个子节点
补充:(3)(4)中的函数可以使用两个特别的值:odd(奇数)和even(偶数)
(5)兄弟节点的选择
- 相邻兄弟 类型 + 类型
- 后续所以兄弟,包括表兄弟 类型~类型
(6)子代和后代的选择
- 子代 >
- 后代 空格
注意:css选择器还可以组选择,只需要用 逗号 隔开就好;也可以联合使用,只需要没有空格的连着写即可
6、Xpath选择器
elements=wd.find_elements_by_xpath('参数') #以列表的形式返回所有符合元素;若无,空列表
element=wd.find_element_by_xpath('参数') #返回第一个符合条件的元素;如无,抛出异常
绝对路径:以 / 开头,将每层依次写下,用 / 隔开,类似子代
相对路径:以 // 间隔 ,类似后代
不管是绝对还是相对路径,每一层都要有标签或者通配符*
(1)根据属性选择(id class与其他属性一视同仁)
格式 : [@属性名="属性值"],其中属性值的引号不可省,但是可单可双,要在标签或*后使用
也可以进行模糊查询,具体有三种形式:
- [contain(@属性名,'值')] 包含
- [starts-with(@属性名,'值')] 以...开头
- [ends-with(@属性名,'值')] 以...结尾,但是这属于xpath2.0语法,目前浏览器不支持
(2)根据次序选择
- 标签名[n]或者*[n] 分别表示选择标签名的第n个或者第n个
- 标签名[last()-n]或者*[last()-n] 分别表示标签名的倒数第n+1个或者倒数第n+1个
- 标签名[position()<n]或者*[position()<n] 其中<可以换成其他的比较符号,last()也可应用于n
(3)父节点 /..
后续亲兄弟节点 /following-sibling::*或tag名
前面亲兄弟节点 /preceding-sibling::*或tag名
注:也可以进行组选择,使用 | 连接
7、专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。
link复数定位find_element(s)_by_link_text()
partial_link复数定位find_element(s)_by_partial_link_text()
三、元素操作(点击、输入、获取以及鼠标和键盘操作等)
定位元素的函数 find_elements_by_xxx()返回一个WebElement对象element,然后就可以进行元素操作,常见的如下:
click(),send_keys(' ') ,text, get_attribute('属性名') [innerHTML outerHTML 是特殊的参数]
补充 : text属性如果不显示或只显示部分内容,可用get_attribute('innerHTML')或者('textContent')
输入框输入的内容不可以通过text属性获得,要用get_attribute('value')
四、实战技巧
1、radio checkbox select三种选择框元素
(1)radio和checkbox都对应input标签,type类型不同,分别对象单选和多选,一组的采用同一个name值
select对应的select标签,选项放在option标签内,默认为单选,在select中添加属性multiple改为多选
(2)radio click() 选中 ;checkbox click() 选中和未选中状态切换
(3)select有专门的类进行处理Select(select元素)实例化
(de)select_by_value() (de)select_by_index() (de)select_by_visible_text() deselect_all()
2、alert confirm prompt三种弹出框 alert=wd.switch_to.alert
(1)alert: alert.text ; alert.accept()
(2)confirm: alert.text ; alert.accept(); alert.dismiss()
(3)prompt : alert.send_keys() ; alert.text ; alert.accept(); alert.dismiss()
3、frame切换
(1)frame或iframe标签利用src属性指定一个html文件,使其嵌入到当前HTML文件中;但是由于wd的访问范围不包括嵌入页面的,所以如果需要访问嵌入文件的元素,需要切换frame
(2)wd.switch_to.frame(' ') 参数为frame的特征或者对应的webelement元素
wd.switch_to.default_content() 返回到原来的frame
4、窗口切换
wd.title
wd.switch_to.window(handle), 其中handle要通过wd.window_handles结合一些条件查找到的
mainWindow=wd.current_window_handle
5、界面等待管理
某些元素内容不会立即出现,wd捕捉不到。selenium提供了一个方案:周期性(0.5s)重新寻找元素,直到元素找到或者超出最大等待时间抛出异常;
wd.implicitly(n):最大等待时间为n毫秒
要注意的是,周期性寻找的前提是找不到,如果找到了虽然是不正确的,那这个是不会处理这个情况的(一般只能sleep下)
Selenium自动化框架理论总结相关推荐
- python表单切换_python3 selenium自动化 frame表单嵌套的切换方法
在web自动化测试中,测试工程师经常会碰到frame表单嵌套结构,直接定位会报错,我们需要切换表单后才能成功定位. 我拿QQ邮箱登录来作为例子说下frame怎么切换. qq邮箱页面按F12可以看到以下 ...
- python自动化办公都能做什么菜-python+selenium自动化(一)之环境搭建
一.环境选择 python版本:python3.7(64位)下载地址:https://www.python.org/downloads/ (推荐使用官方下载) selenium版本:selenium3 ...
- Docker selenium自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
Docker selenium 自动化 - 使用 Python 操作 docker 运行.启用.停用和查询容器实例演示 第一章:Python 操作 docker ① python 运行 docker ...
- Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
docker 运行 selenium 自动化发现根本不向下走了. 访问 Grid 控制台发现提示 3 requests waiting for a slot to be free. 原因是之前执行失败 ...
- Docker selenium自动化 - Python调用容器实例跑自动化查天气实例演示,docker selenium自动化环境部署过程
Docker selenium自动化 - 环境部署与 Python 自动化运行实战演示 第一章:docker selenium 环境部署 ① 下载 selenium 镜像 ② 容器 selenium ...
- Docker selenium自动化 - 修改/dev/shm路径大小实例演示,“session deleted because of page crash“问题解决
Docker 执行 selenium 自动化过程报错信息: selenium.common.exceptions.WebDriverException: Message: unknown error: ...
- Python+selenium 自动化-mac下安装配置chrome驱动方法
我的 Python 版本有两个,先通过 which 看一下对应版本的位置. 然后找到 python 安装目录里的 bin 文件夹,把对应的驱动放里面就好了. 如果不知道怎么匹配对应 chrome 版本 ...
- Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示
Python+selenium 自动化 第一章:基本环境搭建 ① 安装 selenium 库 ② 下载对应版本的浏览器驱动 ③ 调用百度查天气演示 第一章:基本环境搭建 ① 安装 selenium 库 ...
- Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示
我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...
最新文章
- java成员变量和局部变量的初始化和内存中的运行机制
- 如何在html中自动生成条形图,css如何创建3D立体的条形图?
- C++改变基类成员在派生类中的访问属性
- 微信小程序基础(一)
- 前端:JS/35/二级联动菜单,select对象,select对象的属性,option对象,option对象属性,实例:省份列表与城市列表的联动
- Kotlin基础学习第5章—表达式
- 在HP-UX上安装Oracle11.2.0.3修改maxfiles
- HashTable 源码解析 jdk1.8
- [Scikit-learn教程] 03.02 文本处理:分类与优化
- 汉印扫描器设置软件_汉印HPRTK180打印机驱动
- 查找Excel最后一个非空单元格的值,你会吗?(适用于数据加行时,一直引用最后一个非空单元格的值)
- python代码范文_如何给你的Python代码“减负”,这里有一份指南请查收
- git FETCH_HEAD 版本回滚 ORIG_HEAD
- 苹果app退款_app退款理由写什么好?苹果退款理由怎么写才好?
- java期末考试B卷题及答案,《JAVA程序设计》期末试题B卷
- 量化交易 米筐 获取股票列表与历史合约数据
- UI设计教程分享:PS故障风海报制作教程
- 高可用集群下的负载均衡(7):haproxy + keepalived 实现高可用负载均衡
- 有 ABCD 四个人要在夜里过一座桥,他们通过这座桥分别需要耗时 1、2、5、10 分钟,现在只有一支手电,过桥时必须带有手电,并且同时最多只能两个人一起过桥。请问如何安排能够让四个人尽快都过桥。
- tiny2440刷机步骤