2.2.5 WebDriver API及对象识别技术(一)

63 篇文章 21 订阅
订阅专栏

切换Frame操作

frameset不用切,frame/iframe需要层层切

        frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。

一、怎么切到frame中(switch_to.frame())

  • selenium提供了switch_to.frame()方法来切换frame

switch_to.frame(reference)

reference是传入的参数,用来定位frame,可以传入id、name、index以及selenium的WebElement对象,假设有如下HTML代码 index.html:

<html>    <head>        <title>Iframe测试</title>    </head><body>    <iframe src="a.html" id="frame1" name="myframe">    </iframe></body></html>

想要定位其中的iframe并切进去,可以通过如下代码:

 

from selenium import webdriverget_driver=webdriver.Chrome()get_driver.switch_to.frame(0)  #用frame的索引来定位,第一个是0#get_driver.switch_to.frame("frame1")  #可以使用id值来定位#get_driver.switch_to.frame("myframe")  #使用name来定位#get_driver.switch_to.frame(get_driver.find_element_by_id('frame1')) #使用webelement对象来定位

通常采用id和name就能够解决绝大多数问题。但有时候frame并无这两项属性,则可以用index和WebElement来定位:

  • a、index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位;

  • b、WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象;

举个例子:

<iframe src="mywoodframe.html" />

 

用xpath定位,传入WebElement对象:

get_driver.switch_to.frame(get_driver.find_element_by_xpath("//iframe(contains(@src,'wood'))"))

 

二、从frame中切回主文档(switch_to.default_content())

切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。

self.get_driver.switch_to.default_content()

 

三、嵌套frame的操作(switch_to.parent_frame())

有时候我们会遇到嵌套的frame,如下:​​​​​​​

<html>    <iframe id="iframe1">        <iframe id="iframe2" />    </iframe></html>

 

1、从主文档切到frame2,一层层切进去。​​​​​​​

self.get_driver.switch_to.frame("iframe1")self.get_driver.switch_to.frame("iframe2")

2、从frame2再切回frame1,这里selenium给我们提供了一个方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。

self.get_driver.switch_to.parent_frame()

有了parent_frame()这个相当于后退的方法,我们可以随意切换不同的frame,随意的跳来跳去了。

鼠标事件

   设置鼠标事件 (这些方法封装在ActionChains类中)

from selenium.webdriver.common.action_chains import ActionChains
  • context_click()  右击

  • double_click()   双击

  • drag_and_drop()  拖动

  • move_to_element()  鼠标悬停在一个元素上

  • click_and_hold()   按下鼠标左键在一个元素上

注意:在引用鼠标模块时容易出现的两个错误:

  • 1)ActionChains(驱动器对象) 容易将驱动器对象漏掉

  • 2)在调用完相关操作后,没有添加执行步骤即perform()

context_click() 右击

#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
....
#定位到要右击的元素
right =driver.find_element_by_xpath("xx")
#对定位到的元素执行鼠标右键操作ActionChains(driver).context_click(right).perform()
....

drag_and_drop()  拖动

from selenium.webdriver.common.action_chains import ActionChains
...
#定位元素的原位置
element = driver.find_element_by_name("xxx")
#定位元素要移动到的目标位置
target =  driver.find_element_by_name("xxx")
#执行元素的移动操作ActionChains(driver).drag_and_drop(element,target).perform()

move_to_element()   鼠标悬停

from selenium.webdriver.common.action_chains import ActionChains
...
#定位元素的原位置
element = driver.find_element_by_name("xxx")
#定位元素要移动到的目标位置
target =  driver.find_element_by_name("xxx")
#执行元素的移动操作ActionChains(driver).drag_and_drop(element,target).perform()

键盘事件

设置键盘事件(这些方法封装在Keys类中)

from selenium.webdriver.common.keys import Keys   #设置键盘事件

键盘删除事件

driver.find_element_by_id('kw').send_keys('Selenium2.00')
time.sleep(5)
driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)

空格事件

driver.find_element_by_id('kw').send_keys(Keys.SPACE)
time.sleep(5)
driver.find_element_by_id('kw').send_keys('Selenium2.00')

全选事件

driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
time.sleep(3)

复制事件

driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'c')
time.sleep(3)
driver.get(second_url='http://www.hao123.com')

粘贴事件

driver.find_element_by_id('search-input').send_keys(Keys.CONTROL,'v')
time.sleep(2)
driver.find_element_by_class_name('button-hook').click()

思考

Q:键盘事件是否可以解决下拉列表框的选择,如何实现?
R:可以,可以通过上下键然后乘以随机产生的数,即可完成向上或者向下选择;例如:

get_driver.find_element_by_name("area").send_keys(Keys.ARROW_DOWN* 3)
Selenium WebDriver with Python: Getting Started with UI AutoTesting
禅与计算机程序设计艺术
08-10 81
作者:禅与计算机程序设计艺术Selenium is an open-source automated testing tool that automates web applications for end-to-end testing. It uses the latest browsers and real browser drivers to perform tasks such as testing websites, mobile apps, and other types of software
Web自动化一:Selenium工作原理详讲
zhangwenxatu的博客
01-01 756
本文主要讲解Selenium1.0、2.0和3.0的工作原理,网上关于selenium的工作原理很对,我这里只是加入一些自己的理解,希望对大家有所帮助; 1.Selenium介绍(可忽略) Selenium是最广泛使用的开源Web UI(用户界面)自动化测试框架。它最初由Jason Huggins于2004年开发,作为Thought Works的内部工具。 Selenium支持跨不同浏...
Python+selenium WebDriver API
dianbachan6348的博客
05-19 848
目录 2.1 操作元素基本方法 2.2 常用8种元素定位(Firebug和firepath) 2.3 xpath定位 2.4 CSS定位 2.5 SeleniumBuilder辅助定位元素 2.6 操作元素(键盘和鼠标事件) 2.7 多窗口、句柄(handle) 2.8 定位一组元素elements 2.9 iframe 2.10 select下拉框 2.1...
测试工程师全栈技术进阶与实践读书笔记
yyjbluesword的专栏
02-20 2595
第一章 软件测试基础知识精要(上) 1.1 从“用户登录”测试谈起 1.1.1 功能测试用例 1.1.2 更多的测试用例 1.1.3 功能性需求与非功能性需求 对显式功能性需求的验证 对隐式功能性需求的验证 安全性 性能 兼容性 1.1.4 测试的不可穷尽性 ..
python+selenium自动化软件测试(第2章)
weixin_41918841的博客
02-26 8625
目录 2.1 操作元素基本方法 2.1.1 打开网页 2.1.2 设置休眠 2.1.3 页面刷新 2.1.4 页面切换 2.1.5 设置窗口大小  2.1.6 截屏 2.1.7 退出 2.1.8 加载浏览器配置 2.2 常用8种元素定位(Firebug和firepath) 2.2.1 环境准备 2.2.2 查看页面元素 2.2.3 find_element_by_id()...
Python Selenium 基础入门
步入人工智能
05-20 1万+
本内容主要介绍 Python Selenium 的基础使用方法。
web自动化捕捉元素基本方法
03-21 1795
前言:前面已经把环境搭建好了,从这篇开始,正式学习seleniumwebdriver框架。我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,...
【自动化测试】自动化测试框架与工具
热门推荐
黑黑白白君的博客
05-06 2万+
文章目录1)什么是自动化测试框架?1.1 什么是框架?1.2 什么是自动化测试框架?1.2.1 优点:1.2.2 框架的基本组件1、需要配置文件管理:2、业务逻辑代码和测试脚本分离3、报告和日志文件输出4、自定义的库的封装5、管理、执行脚本方式6、第三方插件引入7、持续集成总结1.3 为什么需要自动化测试框架?1.4 判断是否需要自动化测试适用项目:2)自动化测试框架的类型2.1 自动化测试框架的分类2.1.1 基于模块的测试框架:2.1.2 库架构测试框架2.1.3 数据驱动测试框架2.1.4 关键字驱动
selenium实现web自动化测试
karsa__的博客
12-30 5569
Web自动化测试 课程大纲 序号 章节 知识点 1 第一章 Web自动化入门 1.认识自动化及自动化测试2.自动化测试工具选择3.环境搭建 2 第二章 Selenium-API 1.元素定位方式2.元素和浏览器的操作方法3.鼠标和键盘操作4.元素等待5.HTML特殊元素处理6.窗口截图7.验证码处理 3 第三章 Pytest框架 1.Pytest基本使用 4 第四章 PO模式 1.方法封装2.PO模式介绍3.PO模式实战 5 第五章 数据驱动 1.JSON读写2.数据驱动介绍
layui-v2.2.5_离线API.rar
08-24
layui2.5的离线API,文档抓取后整理的。演示demo多,还有各种源码。需要的话请速度下载。推荐使用
badboy2.2.5及脚本.zip
11-17
录制Jmeter所需脚本,一般人用badboy都是使用它的录制功能,其实badboy还是一款自动化的工具,它可以实现检查点、参数化、迭代、并发、报告、断点等功能。
gxt-api-2.2.5 doc
10-17
gxt-api-2.2.5 sdk doc 即ext-gwt api doc
jaxb-api-2.2.5.jar
07-20
jaxb-api-2.2.5.jar
pycharm2020.1.1专业版安装指南
06-12 1万+
本章引言 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。PyCharm最常用的两个版本就是社区版和专业版;鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,本文主要介绍一下 PyCharm 在 Windows下是如何安装和破解的。 社区版、专业版区别 1.功能不同 Pycharm专业版是功能最丰富的,与社区版相比,Pycharm专业版增加了Web开发、Python We框架、Pyth...
Python循环经典练习题10例
05-30 1万+
前言 循环这一章节主要考察学员的逻辑思维能力,数学能力,所以如果这块弱的学员可以多找些练习题练习。 【例1】:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码: foriinrange(1,5):forjinrange(1,5):forkinrange(1,5):if(i...
1.2.12 python内置模块--time、datetime
06-29 5253
时间戳 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。 注意:目前Python 3.6中支持的最大的时间戳为32535244799(3001-01-01 15:59:59) Python的time 块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳。例如: >>>import time>>>time.time() s.
1.2.1 python中的函数
06-07 4249
python函数 函数用于在程序中分离不同的任务;函数允许程序的控制在调用代码和函数代码之间切换 函数功能 (1)实现结构化程序设计。通过把程序分割为不同的功能模块,可以实现自顶向下的结构化设计 (2)减少程序的复杂度。简化程序的结构,提高程序的可阅读性 (3)实现代码的复用。一次定义多次调用,实现代码的可重用性 (4)提高代码的质量。实现分割后子任务的代码相对简单,易于开发、调试、修改和维护 (5)协作开发。大型项目分割成不同的子任务后,团队多人可以分工合作,同时进行协作开发 (6)实...
1.1.7 python中的循环
06-02 1788
while循环 在给定的判断条件为 true 时执行循环体,否则退出循环体。基本语法: while bool表达式: 循环体【else: 语句块】 【例】实现1-100的求和计算​​​​​​​ i=1sum=0while i<=100: sum+=i i+=1print("1-100的和为:%d"%sum) 程序执行结果如下:​​​​​​​ C:\Users\zemuerqi\PycharmProjects\Python2020\venv\Sc...
github 1024 android 2.2.5
最新发布
01-24
Android 2.2.5是GitHub 1024项目的一个版本号,表示这是该项目在Android平台上的第2.2.5个版本。在这个版本中,开发者可能修复了一些之前版本存在的bug,或者添加了一些新的功能和优化。 GitHub是一个非常知名的...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 聚合导航网站 16684
  • pycharm2020.1.1专业版安装指南 13371
  • Python循环经典练习题10例 11319
  • 1.2.12 python内置模块--time、datetime 5253
  • 1.2.1 python中的函数 4248

分类专栏

  • Python全栈测试开发 63篇
  • 实用工具 12篇

最新评论

  • 2.3.1 自动化测试如何分层

    蓝腻: 复数形式怎么封装啊?

  • 百度网盘解除限速的神器(二)

    蜗牛載奔跑: 这个不能用了,刚才试过

  • 微信恢复数据

    m0_66841070: 就是怎么用

  • 微信恢复数据

    小丑T: 打不开怎么回事

  • pycharm2020.1.1专业版安装指南

    AaQ8568: 激活码是复制粘贴上去,插件怎么使用?(目前小白一枚)

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • PDF各种格式相互转换
  • windows小工具大全
  • 3.2.1 Requests中Session对象使用
2020年77篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zemuerqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司西安网站开发公司宝鸡设计公司网站丹东网站设计模板推荐日照百姓网标王推广推荐朝阳企业网站设计推荐临沂百姓网标王推广报价滨州营销型网站建设报价贵港高端网站设计普洱企业网站改版价格罗湖关键词排名包年推广哪家好淮南关键词排名报价阿里网站建设多少钱大丰至尊标王多少钱平凉网站优化按天扣费多少钱丹竹头英文网站建设报价普洱关键词排名报价张家界高端网站设计哪家好宜宾百度网站优化莱芜SEO按天计费哪家好开封seo价格蚌埠网站搭建咸宁百搜标王价格宝鸡网站seo优化报价广安seo优化哪家好张家界百度标王资阳网站开发报价玉林SEO按效果付费报价天门SEO按天计费报价垦利网站推广多少钱淮北设计网站公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化