一、自动化原理

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自动化框架理论总结相关推荐

  1. python表单切换_python3 selenium自动化 frame表单嵌套的切换方法

    在web自动化测试中,测试工程师经常会碰到frame表单嵌套结构,直接定位会报错,我们需要切换表单后才能成功定位. 我拿QQ邮箱登录来作为例子说下frame怎么切换. qq邮箱页面按F12可以看到以下 ...

  2. python自动化办公都能做什么菜-python+selenium自动化(一)之环境搭建

    一.环境选择 python版本:python3.7(64位)下载地址:https://www.python.org/downloads/ (推荐使用官方下载) selenium版本:selenium3 ...

  3. Docker selenium自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示

    Docker selenium 自动化 - 使用 Python 操作 docker 运行.启用.停用和查询容器实例演示 第一章:Python 操作 docker ① python 运行 docker ...

  4. Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决

    docker 运行 selenium 自动化发现根本不向下走了. 访问 Grid 控制台发现提示 3 requests waiting for a slot to be free. 原因是之前执行失败 ...

  5. Docker selenium自动化 - Python调用容器实例跑自动化查天气实例演示,docker selenium自动化环境部署过程

    Docker selenium自动化 - 环境部署与 Python 自动化运行实战演示 第一章:docker selenium 环境部署 ① 下载 selenium 镜像 ② 容器 selenium ...

  6. Docker selenium自动化 - 修改/dev/shm路径大小实例演示,“session deleted because of page crash“问题解决

    Docker 执行 selenium 自动化过程报错信息: selenium.common.exceptions.WebDriverException: Message: unknown error: ...

  7. Python+selenium 自动化-mac下安装配置chrome驱动方法

    我的 Python 版本有两个,先通过 which 看一下对应版本的位置. 然后找到 python 安装目录里的 bin 文件夹,把对应的驱动放里面就好了. 如果不知道怎么匹配对应 chrome 版本 ...

  8. Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示

    Python+selenium 自动化 第一章:基本环境搭建 ① 安装 selenium 库 ② 下载对应版本的浏览器驱动 ③ 调用百度查天气演示 第一章:基本环境搭建 ① 安装 selenium 库 ...

  9. Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示

    我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...

最新文章

  1. java成员变量和局部变量的初始化和内存中的运行机制
  2. 如何在html中自动生成条形图,css如何创建3D立体的条形图?
  3. C++改变基类成员在派生类中的访问属性
  4. 微信小程序基础(一)
  5. 前端:JS/35/二级联动菜单,select对象,select对象的属性,option对象,option对象属性,实例:省份列表与城市列表的联动
  6. Kotlin基础学习第5章—表达式
  7. 在HP-UX上安装Oracle11.2.0.3修改maxfiles
  8. HashTable 源码解析 jdk1.8
  9. [Scikit-learn教程] 03.02 文本处理:分类与优化
  10. 汉印扫描器设置软件_汉印HPRTK180打印机驱动
  11. 查找Excel最后一个非空单元格的值,你会吗?(适用于数据加行时,一直引用最后一个非空单元格的值)
  12. python代码范文_如何给你的Python代码“减负”,这里有一份指南请查收
  13. git FETCH_HEAD 版本回滚 ORIG_HEAD
  14. 苹果app退款_app退款理由写什么好?苹果退款理由怎么写才好?
  15. java期末考试B卷题及答案,《JAVA程序设计》期末试题B卷
  16. 量化交易 米筐 获取股票列表与历史合约数据
  17. UI设计教程分享:PS故障风海报制作教程
  18. 高可用集群下的负载均衡(7):haproxy + keepalived 实现高可用负载均衡
  19. 有 ABCD 四个人要在夜里过一座桥,他们通过这座桥分别需要耗时 1、2、5、10 分钟,现在只有一支手电,过桥时必须带有手电,并且同时最多只能两个人一起过桥。请问如何安排能够让四个人尽快都过桥。
  20. tiny2440刷机步骤

热门文章

  1. 基于WebGL架构的3D可视化平台—停车场管理系统
  2. ManageEngine卓豪助您符合ISO 20000标准(二)
  3. ISO20000和ITSS认证有什么区别
  4. 2023 在线聊天室 好友群组朋友圈功能源码
  5. 决策树进阶——剪枝处理
  6. VHDL||数字系统设计实验--基于VHDL的流水灯电路设计
  7. Day123.ElasticSearch:CAP定理、集群搭建、架构原理及分片、倒排索引、面试题
  8. 限制同一IP一段时间内访问次数
  9. 2023 DiscuzX 3.5 聚合支付接口插件源码
  10. AI校园来了,你准备好了吗?