一、自动化原理

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. python 创建.txt的文件 并写内容到里面
  2. KubeShere安装Redis
  3. 关于Java API不能远程访问HBase的问题
  4. 彻底解决Ubuntu 执行make xconfig出错
  5. 前端学习(2472):发布文章功能介绍
  6. Magento 获取系统设置 How to get data from Magento System Configuration
  7. fedora下做成liveOS的U盘容量变小问题
  8. [leetcode]241. 为运算表达式设计优先级
  9. oracle数据库学习相关笔记-相关约束
  10. php数据库随机选择,php – 在MySQL数据库中选择两个随机行
  11. 教你快速填充Excel中不同的数据,别再一个个向下拉动啦
  12. force transducer and acceleration transducer
  13. 设备零线地线短路维修
  14. 计算机定时开机关机设置,怎样设置电脑定时开机关机
  15. 微信小程序之获取当前位置附近的美食、酒店、娱乐、超市等,并显示标记
  16. 98% after emitting CopyPlugin问题
  17. 微型计算机音节,二年级微机下册教案
  18. 高等院校毕业生登记表计算机水平怎么填,关于《高等学校毕业生登记表》填写详细说明...
  19. 2023-Python实现有道翻译接口加密解密
  20. 给锂电池充电,充电器的输出电压

热门文章

  1. C#分割文件路径中的文件名与路径
  2. 荷露叮咚全网独一无二的Powerdesigner15软件设计视频教程
  3. Excel工具 - 合并多个同类Excel
  4. python解密《御赐小仵作》反切注韵法
  5. 数字身份 和 iot_数字身份的过去和现在
  6. 多媒体嵌入及css高级应用
  7. 羽毛球之双打反手发网前小球后的注意事项
  8. 解除WORD文件锁定
  9. 余额宝收益率跌破5% 落后银行类宝宝产品
  10. 如何提取公众号文章封面图