本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里

一、常见特殊情况处理如iframe/弹窗处理

有时候定位不到元素,是因为需要定位的元素在frame里面,这个时候需要切换到对应的frame里面,再去定位元素

 # 切换frame
driver.switch_to.frame("frame") # 切入到id="frame"的嵌套中
driver.switch_to.default_content() # 退出当前frame, 退回到原来的主body
driver.switch_to.parent_frame() # 返回上一级父frame
# 弹窗对话框处理
driver.switch_to.alert.text # 获取网页上的警告信息
driver.switch_to.alert.accept # 接受警告信息,告警弹窗对话框点击确定
driver.switch_to.alert.dismiss # 取消告警弹窗对话框
driver.switch_to.alert.send_keys("context") # 弹窗对话框中输入context
# 切换窗口/浏览器
driver.window_handles # 获取所有浏览器句柄,一般用于for in 遍历
driver.switch_to.window("handle") # 切换到handle的窗口

二、等待时间的设置

  隐形等待,设置全局元素等待超时时间。隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver 查询Dom一定时间。默认值是0, 但是设置之后,这个时间将在WebDriver 对象实例整个生命周期都起作用。但这里有一个弊端,那就是程序会在设定的时间内一直等待整个页面加载完成,才会执行下一步,有时候个别JS加载比较慢会比较浪费时间。

 # 设置隐性等待时间
driver.implicitly_wait(10)

  显性等待,wait模块的WebDriverWait()类,配合until或者until_not方法,再辅以一些判断条件expected_conditions模块,就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,如果可见就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;如果同时设置隐性等待和显性等待,取最大等待时间。

 # 设置显性等待
from selenium.webdriver.support import expected_conditions as EC
"""
__init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
- driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote)
- timeout - 超时时间
- poll_frequency - 迭代间隔时间,停几秒重新获取一次,默认0.5S
- ignored_exceptions - 超时时间内忽略的异常,默认只有NoSuchElementException
"""
WebDriverWait(driver, 20, 1).until(EC.presence_of_element_located((By.ID, 'foo')))

  expected_conditions模块常用的判断条件,这里根据官方API翻译一下,仅供参考

三、Cookie处理

 driver.get_cookies()  # 获得所有cookie信息
driver.get_cookie("name") # 返回指定name的cookie信息
driver.add_cookie({'name': 'key', 'value': 'value'}) # 添加cookie
driver.delete_cookie("name") # 删除指定name的cookie
driver.delete_all_cookies() # 删除所有cookie

四、其他操作(下拉框/文件上传等)

 # 下拉框处理
from selenium.webdriver.support.ui import Select
# when given "foo" this would select an option like: <option value="foo">Bar</option>
Select(driver.find_element_by_xpath('xpath')).select_by_value("foo")
# 上传文件,使用send_keys()发送一个本地的文件路径,从而达到上传文件的目的
driver.find_element_by_name("file").send_keys('D:\\test_file.xlsx')
# 截图,必须以".png"结尾
driver.get_screenshot_as_file("text.png")

python+selenium自动测试之WebDriver的常用API(基础篇二)的更多相关文章

  1. python+selenium自动测试之WebDriver的常用API(基础篇一)

    基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.对浏览器操作 driver = webdriver.Chrome() # 初始化chrome driv ...

  2. Python + Selenium 自动发布文章(一):开源中国

    https://blog.csdn.net/qq_28804275/article/details/80891949 https://blog.csdn.net/qq_28804275/article ...

  3. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  4. Python+selenium常用方法(Webdriver API)

    小编整理了目前学习的Python+selenium常用的一些方法函数,以后有新增再随时更新. 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() ...

  5. python selenium自动化测试之路(1)--分层测试概念、selenium工具介绍

    1.分层自动化测试概念 传统的自动化市场更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段都需要自动化测试 大多公司与研发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,所 ...

  6. Python+selenium自动化测试之浏览器基础操作

    **​​前言** 本文主要讲解webdriber框架,Selenium 就像真实用户所做的一样,Selenium 测试可以在 Windows.Linux 和 Macintosh上的 Internet ...

  7. Servlet 常用API学习(二)

    Servlet常用API学习 一.HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议. HTTP是 hypertext transfer pr ...

  8. ASP.NET Web API 基础篇1

    ASP.NET Web API 直到我膝盖中了一箭[1]基础篇 无题 蓦然回首,那些年,我竟然一直很二. 小时候,读武侠小说的时候,看到那些猪脚,常常会产生一种代入感,幻想自己也会遭遇某种奇遇,遇到悬 ...

  9. Python基础篇(二)_基本数据类型

    Python基础篇——基本数据类型 数字类型:整数类型.浮点数类型.复数类型 整数类型:4种进制表示形式:十进制.二进制.八进制.十六进制,默认采用十进制,其他进制需要增加引导符号 进制种类 引导符号 ...

随机推荐

  1. 简单记录一次getshell到进服务器的过程

    通过st2命令执行上次木马进行getshell 查看whoami,发现权限是administrator,直接net user xxx xxx123.. /add,发现拒绝访问 通过命令tasklist ...

  2. Git如何合并一个已经在GitHub上提交但没有合并的Pull Request请求

    步骤 进入Git仓库,执行curl -L https://github.com/<USER>/<REPO>/pull/<NO>.patch | git am

  3. 关于gcd的四道题

    T1:bzoj2705 题目描述: 给定一个n求\(\sum\limits_{i=1}^ngcd(i,n)\) 因为n太大,所以O(n)的做法肯定不行,然后就去想根号的方法. \[\sum\limit ...

  4. 一道简单的CTF登录题题解

    一.解题感受 这道题50分,在实验吧练习场算比较高分,而且通过率只有14%,比较低的水平. 看到这两个数据,一开始就心生惬意,实在不应该呀! 也是因为心态原因,在发现test.php之后,自以为在SQ ...

  5. python类的两种创建方式

    参考: https://blog.csdn.net/likunkun__/article/details/81949479

  6. python验证卡普耶卡(D.R.Kaprekar)6174猜想

    1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律: 对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到61 ...

  7. slickedit编译调试linux应用程序

    目录 slickedit编译调试linux应用程序 工程建立 编译 智能报错跳转 配置编译环境 调试 title: slickedit编译调试linux应用程序 date: 2019/3/19 17: ...

  8. 2018-2019-2 《Java程序设计》第9周学习总结

    20175319 2018-2019-2 <Java程序设计>第9周学习总结 教材学习内容总结 本周学习任务: 下载安装MySQL数据库管理系统. 教材介绍在官网下载安装Mysql服务,启 ...

  9. 一次对JDK进行"减肥"的记录

    起因 最近做的一个小项目,因为要涉及到批量部署,每次在部署之前都需要在各个主机上先安装jdk环境(为了使用jdk自带的工具如jps等,所以没有单纯安装jre),但是因为jdk文件太大(以jdk-8u1 ...

  10. kali linux工具--信息批量收集工具theharvester

    在渗透测试早期阶段,安全人员往往需要从互联网快速获取目标的一些信息,以确认测试目标的概况.为了满足这个需求,Kali Linux提供了theharvester工具.该工具可以搜索引擎.社交网站获取目标 ...