一、特殊操作处理

1. 下拉选择框操作

1.1 如何操作下拉选择框

实现方式一

思路:先定位到要操作的option元素,然后执行点击操作

driver.find_element_by_css_selector("[value='xxx']").click()
1.2 Select类

说明:Select类是Selenium为操作select标签特殊封装的

实例化对象:

select = Select(element)
element: <select>标签对应的元素,通过元素定位方式获取
例如:driver.find_element_by_id("selectA")

方法:

  1. select_by_index(index)				--> 根据option索引来定位,从0开始
2. select_by_value(value) -->根据option属性 value值来定位
3. select_by_visible_text(text) -->根据option显示文本来定位

操作:

  1. 导包:from selenium.webdriver.support.select  import Select
2. 实例化:s = Select(element)
3. 调用方法:s.select_by_index()

注意:

  1. 实例化select时,需要的参数为select标签元素
  2. 调用Select类小面的方法,是通过索引、value属性值、显示文本去控制,不需要click事件

2.弹出框

网页中常用的弹出框:

  1. alert 警告框
  2. confirm 确认框
  3. prompt 提示框
2.1 弹出框处理方法

说明:Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样

  1. 获取弹出框对象

    alert = driver.switch_to.alert
  2. 调用

    ​ alert..text --> 返回alert/confirm/prompt中的文字信息

    ​ alert.accept() --> 接收对话框选项(同意)

    ​ alert.dismiss() --> 取消对话框选项(取消)

3.滚动条

滚动条:一种可控制页面显示范围的组件

3.1 实现方式

说明:selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScrip脚本的方法,所以我们可以通过JavaScrip脚本来达到操作滚动条的目的

1. 设置JavaScrip脚本控制滚动条
js = "window.scrollTo(0,1000)"
(0:左边距;1000:上边距;单位像素) 2. selenium调用执行JavaScrip脚本的方法
driver.execute_script(js)

4. frame切换

frame:HTML页面中的一种框架,主要作用是在页面中指定区域显示另一页面元素

4.1 frame切换方法

说明:在selenium中封装了如何切换frame框架的方法

方法:

1. driver.seitch_to.frame(frame_reference)		-->切换到指定frame的方法
frame_reference: 可以为frame框架的name、id或者定位到的frame元素
2. driver.switch_to.default_content() --> 恢复默认页面方法

5. 多窗口切换

说明:在HTML页面中,当点击超链接或者按钮时,有的会在新的窗口打开页面

5.1 实现方法

说明:在Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;

​ 句柄:英文handle, 窗口的唯一识别码

方法:

1. driver.current_window_handle				--> 获取当前窗口句柄
2. driver.window_handles --> 获取所有窗口句柄
3.driver.switch_to.window(handle) --> 切换指定句柄窗口

6.窗口截图

说明:把当前操作的页面,截图保存到指定位置

6.1 截图方法

说明:在Selenium中,提供了截图的方法,我们只需要调用即可

方法:

​ driver.get_screenshot_as_file(imgpath)

​ imgpath:图片保存路径

​ 当前目录:./test.png

​ 上一级目录:../test.png

7.验证码

说明:一种随机生成的信息(数字、字母、汉字、图片)等为了防止恶意的请求行为,增加应用的安全性

7.1 验证码的处理方式

说明:Selenium中并没有对验证码处理的方法,这里介绍针对验证码的几种常用处理方式

方式:

  1. 去掉验证码(测试环境下-采用)
  2. 设置万能验证码(生产环境和测试环境下-采用)
  3. 验证码识别技术(通过 python-tesseract来识别图片类型验证码:识别率很难达到100%)
  4. 记录cookie(通过记录cookie进行跳过登录)

提示:

  1. 去掉验证码、设置万能验证码:都是开发来完成
  2. 验证码识别技术:成功率不高,验证码种类繁多,不太合适
7.2 Selenium操作cookie

方法:

1. get_cookie(name)				--> 获取指定cookie
name:为cookie的名称
2. get_cookies --> 获取本网站所有本地cookies
3. add_cookie(cookie_dict) --> 添加cookie
cookie_dict:一个字典对象,必选的键包括:"name" and "value"
7.2.1案例

需求:使用cookie实现跳过登录

  1. 手动登录百度,获取cookie
  2. 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作

分析:

BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到账号的控制权,通行贴吧、知道、百科、文库、空间、百度云等百度主要产品

  1. 登录baidu,登录成功后抓取(BDUSS)
  2. 使用add_cookie()方法,添加(BDUSS)键和值
  3. 使用刷新方法 driver.refresh

示例代码

from selenium import webdriver
from time import sleep driver = webdriver.Chrome()
# 打开URL
url = 'https://www.baidu.com/'
driver.get(url)
# 将浏览器 最大化
driver.maximize_window()
# 设置cookie
driver.add_cookie({"name": "BDUSS", "value": "根据实际情况填写"})
# 暂停2秒
sleep(2)
# 刷新
driver.refresh()
# 退出浏览器驱动
driver.quit()

注意:必须要刷新才能看到效果

UI自动化学习笔记- Selenium一些特殊操作的处理的更多相关文章

  1. UI自动化学习笔记- Selenium元素定位及元素操作

    一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...

  2. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  3. UI自动化学习笔记- PO模型介绍和使用

    一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...

  4. UI自动化学习笔记- 日志相关操作

    一.日志相关 1.日志 概念:日志就是用于记录系统运行时的信息,对一个事件的记录,也称log 1.1 日志的作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户 ...

  5. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  6. Python3+Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)'''from ...

  7. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  8. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  9. Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...

随机推荐

  1. 【BIGDATA】在Centos上部署ElasticSearch 7.3.2及kibana

    一.下载: 首先,下载ElasticSearch和kibana安装包,版本自选,官方下载页https://www.elastic.co/cn/downloads/ 二.版本检查 很重要的一步,要检查C ...

  2. linux基础之权限管理

    本节内容 1. 权限类别 属主(owner) 属组(group) 其他人(other) 2. 查看权限 ls -l 十位: 第一位文件类型-,d,l, 3. 设置权限 chmod 选项 权限模式 fi ...

  3. [leetcode] 69. x 的平方根(纯int溢出判断实现)

    69. x 的平方根 非常简单的一个题,用二分法逼近求出ans即可,额外注意下溢出问题. 不过我要给自己增加难度,用long或者BigNum实现没意思,只能使用int类型 换句话当出现溢出时我们自己得 ...

  4. GO学习-(38) Go语言结构体转map[string]interface{}的若干方法

    结构体转map[string]interface{}的若干方法 本文介绍了Go语言中将结构体转成map[string]interface{}时你需要了解的"坑",也有你需要知道的若 ...

  5. redis主从架构宕机问题手动解决

    1    主机宕机 1.  设置端口6379是主机,端口6380是从机,全部都正常启动 2.  验证在6379写入数据,在6380也能得到数据 3.  现在将6379主机停掉,模拟主机宕机 4.  由 ...

  6. CVPR2020:基于层次折叠的跳跃式注意网络点云完成

    CVPR2020:基于层次折叠的跳跃式注意网络点云完成 Point Cloud Completion by Skip-Attention Network With Hierarchical Foldi ...

  7. 记 Ant Designer Vue 2.0.1 layout 丢失样式类名问题分析

    现象 <a-layout-sider /> 渲染到页面上会变成 <section class="undefined-has-sider"> 丢失了 layo ...

  8. CentOS:操作系统级监控及常用计数器解析

    我相信有一些人看到这篇文章的标题肯定有种不想看的感觉,因为这样的内容实在被写得太多太多了.操作系统分析嘛,无非就是 CPU 使用率.I/O 使用率.内存使用率.网络使用率等各种使用率的描述. 然而因为 ...

  9. 五、自定义Zabbix监控项目

    要求: 沿用练习三,使用Zabbix实现自定义监控,实现以下目标:监控Linux服务器系统账户的数量. 方案: 需要使用Zabbix自定义key的方式实现自定义监控,参考如下操作步骤:1.创建自定义k ...

  10. jd一面面经

    1.讲一下hashmap原理. 2.concurrentHashMap的原理.concurrentHashMap和hashmap有什么不同? 3.synchnized底层实现?讲讲AQS 4.sync ...