Selenium WebDriver API 学习笔记(一):元素定位

读了虫师《Selenium 2自动化测试实战 基于Python语言》一书,感触颇深,内容非常丰富。现整理下来,供后续学习参考使用。本次主要整理的是元素定位的方式。

1. id定位

find_element_by_id();   

2. name定位

find_element_by_name();   

3. class属性定位

find_element_by_class_name();  	

4. tag属性定位

find_element_by_tag_name();     

5. 元素标签之前的文本信息来定位

find_element_by_link_text();     	

6. 取文本链接的一部分来定位

find_element_by_partial_link_text();  	

7. xpath多种定位策略

find_element_by_xpath(); 

①绝对路径:

find_element_by_xpath("html/body/div[2]/div[2]/div[3]/div[2]/form/input[1]"); 

②元素属性:

find_element_by_xpath("//input[@id='qwe']"); 
find_element_by_xpath("//input[@name='qwe']"); 
find_element_by_xpath("//input[@class='qwe']");
find_element_by_xpath("//*[@id='qwe']"); 

③层级属性:

find_element_by_xpath("//span[@class='qwe']/input");
find_element_by_xpath("//form[@id='qwe']/span[2]/input");

④运算逻辑:

find_element_by_xpath("//input[@id='qwe' and @class='qwer']/span/input");

8. css选择器定位

find_element_by_css_selector();	

其中css也有多种策略:

①class属性:

find_element_by_css_selector(".qwe");

②id属性:

find_element_by_css_selector("#qwe");

③标签名:

find_element_by_css_selector("input");	

A.父子关系:

find_element_by_css_selector("span>input");

B.属性定位:

find_element_by_css_selector('[type="submit"]');

C.组合定位:

find_element_by_css_selector("form.fm>span>input>input.qwe");

9.BY元素定位

以上提到的8种定位方法,webdriver还提供了另一套写法,即统一调用find_element()方法,通过BY来声明定位的方法,并且传入对应定位方法的定位参数。

使用BY之前需要插入BY类:

from selenium.webdriver.common.by import By
find_element(BY.ID,"qwe");
find_element(BY.NAME,"qwe");
find_element(BY.CLASS_NAME,"qwe");
find_element(BY.TAG_NAME,"qwe");
find_element(BY.LINK_TEXT,"xxxxx");
find_element(BY.PARTIAL_LINK_TEXT,"dddd");
find_element(BY.XPATH,"//* [@id='qwe']");
find_element(BY.CSS_CELECTOR," span>input ");
本文转载于网络 如有侵权请联系删除

相关文章

  • 测试开发工作者日记:2020.8.31-超级ui自动化

    很抱歉这个系列没有保持住更新频率。不过接口测试平台最近几天也耽搁了一小下下,明天恢复正常。原因是最近几天在忙一个比较大的生死存亡的技术问题。是什么呢,这里可以给大家透漏下,因公司要求,要对app端数以千计的用例全部实行自动化运行。要支持非常不稳定的测试环境和各种分支环境自由选择,各个模块/服务要像积木一样可自由组合,使用时可以直接在平台上指定/上传apk,并且执行的过程中要实现运行状态可视化,测试报告有繁有简,有word标准报告。而且要实现多台设备的并行/支持多任务的执行。还有支持埋点自动化断言等一系列需求。我用了大概一周时间,搞定了这个平台,实现了全部功能。但是当我真正开始写用例的时候,我发现了一个致命的问题,一个让之前努力全都前功尽弃的问题:就是用例数量实在是过大。如果只是核心用例还好,几十条,一百条,二百条的。维护起来也没太大问题。可当用例达到了几千条时候,我突然发现我草率了。一个真正的量变引起质变的问题:我要全部写完这上千条用例脚本需要多久??几个月,一年?而按照我们每天都有很多迭代上线更新的现况来说,这全部用例也就是每天都会有一大堆要重新改变逻辑来维护。也就是说,我可能还没写

  • ContentProvider再探——Document Provider

    概述通过ContentProvider初探相信你已经知道如何去使用系统提供的ContentProvider或者自定义ContentProvider了,已经基本满足日常开发的需求了,有趣的是,我在官方文档上看到了另外这几个Provider:CalendarProvider:日历提供者,就是针对针对日历相关事件的一个资源库,通过他提供的API,我们可以对日历,时间,会议,提醒等内容做一些增删改查!ContactsProvider:联系人提供者,这个就不用说了,这个用得最多StorageAccessFramework(SAF):存储访问框架,4.4API19以后引入的一个新玩意,为用户浏览手机中的存储内容提供了便利,可供访问的内容不仅包括:文档,图片,视频,音频,下载,而且包含所有由由特定ContentProvider(须具有约定的API)提供的内容。不管这些内容来自于哪里,不管是哪个应用调用浏览系统文件内容的命令,系统都会用一个统一的界面让你去浏览。预览我们选了两个手机来对比:分别是4.2的LenovoS898T和5.0.1的Nexus5做对比,执行下述代码:Intentintent=ne

  • 你想要的思维导图在这里

    你的人生永远不会辜负你的。那些转错的弯,那些走错的路,那些流下的泪水,那些滴下的汗水,那些留下的伤痕,全都让你成为独一无二的自己。·正·文·来·啦·NovaMind白金版+禁止联网更新XMind和NovaMind,各有所长。建议,都安装,合适的时候方便使用。NovaMind,可谓是,思维导图+PPT融合在一起。禁止联网更新首先,打开防火墙找到出站规则,并且新建规则(右击)打开你所解压安装的路径完成案例这是我的Nova属性的详情值。给大家做个参考。NovaMind界面XMind8Pro破解详情找到XMind安装目录,如:E:\ProgramFiles(x86)\XMind,将下载的破解补丁复制到这个目录中。以文本格式打开安装目录中XMind.ini在XMind.ini最后追加一个字段-javaagent,然后加上XMindCrack.jar的绝对路径。例如:-javaagent:E:\ProgramFiles(x86)\XMind\XMindCrack.jar打开XMind,点击帮助——序列号,然后输入以下序列号,邮箱随便填,可以填自己的。XAka34A2rVRYJ4XBIU35UZMU

  • 【前端词典】关于 Babel 你必须知道的

    前言我第一次打开搜索引擎查询关于Babel的资料时,出现的竟然是关于Babel的传说。后来我花了小一天的时间去了解这个传说(来自《旧约圣经》)。BabelTower是全人类联手建造的一个建筑,人们决心合力修建一座通天高塔。因为人们心里少了对上帝的敬畏,多了为自己歌功颂德的功利。上帝不希望这个奇观建成,于是让人们分化成不同的语言,令其不能交流。之后,因为沟通不畅,工程被迫放弃,而且人类从此不再团结,因为语言不通而分化成不同部落,并由于沟通问题,经常发生战乱,因此再无力撼动上帝的权威。了解完这个神话之后,我后面就好好的去了解了一些有关Babel的知识,下面就是正题。内容已经发布在gitHub了,欢迎围观Star,更多文章都在gitHub。什么是BabelBabel官方文档:https://babeljs.io/我们知道各个浏览器对JavaScript版本的支持各不相同,有很多优秀的新语法都不能直接在浏览器中运行。为了解决这个“沟通不畅”的问题,所以就有了Babel,Babel的出现使得我们可以无须顾忌的去使用ES6+的语法。BabelisaJavaScriptcompiler.这也是为何我

  • 《如何高效学习》- 读书笔记

    本书介绍了整体性学习法:强调在学习过程中,需要通过比喻和抽象的方法,将新知识与旧知识相互联系,以提高学习效率和深度的学习方法。Part1整体性学习策略1.1什么是整体性学习整体性学习需要采取多种途径综合学习,而不是试图在大脑中复制一个完美的拷贝。整体性学习是运用你大脑里已有的丰富的神经元网络吸收、整合信息。整体性学习在于创造信息的网络,一个知识与另一个知识相互关联,那些相互关联的知识网络使你真正做到对知识的完全理解,从而轻松地驾驭知识。1.2整体性学习基于三种主要观点结构模型高速公路1.21结构结构就是说一系列紧密联系的知识体系。打个比方:结构就好像你思想中的一座城市,在城市中有很多建筑物,建筑物之间有道路相连,有些建筑高大而且重要,与城市中的其他建筑有上百条路相连。理解就是结构高度发达完善的结果。是不是有些学科你可以轻松“拿下”?你读起这些科目的书毫不费力、兴趣盎然,一切内容看起来那么浅显、通俗,原因何在?因为你的脑袋里已经有这些科目的发达知识结构。假如说结构就是脑袋里的城市的话,那么这些城市一定是道路四通八达、路面整洁而且交通井然有序,虽然车水马龙,却从不见交通堵塞。相反,为什么有

  • 原 荐 简单又灵活的安全框架--Shiro构架和身份认证流程

        ApacheShiro是一款强大易用的安全框架,它可以在任何应用环境中使用,能够跟第三方框架良好的耦合,它的设计目标就是简化应用程序的安全工作管理。那Shiro究竟是如何工作的?    我们先来看看架构总览:    值得一提的是Shiro不提供用户权限的维护,而是从一个或多个配置好的Realms(相当于DAO)中寻找相关数据,来完成用户的授权管理和身份验证(登录)。一、Shiro的详细架构            (参考http://jinnianshilongnian.iteye.com/blog/2018936)    1.Subject:任何可以与应用交互的“用户”。    2.SecurityManager:安全管理器,是Shiro的心脏,负责与其他组件的交互。    3.Authenticator:验证是否有身份,就是平常说的登录。    4.Authorizer:授权器,用来判断当前用户是否具有权限进行相关操作。    5.SessionManager:管理Session的组件。    6.CacheManager:用来管理用户的身份,权限,角色等的缓存。    7.

  • smartClient 3--布局

    一、组件的布局(如何将组件按照想要的方式进行布局,如左右布局,上下布局等等,这里是大框架下的整体布局)HLayout 水平VLayout 垂直HStack  水平但是width不管VStack  垂直但是width不管isc.HLayout.create({ ID:"pageLayout", width:"100%", height:"100%", membersMargin:10,//members之间的margin layoutMargin:10,//layout周围的margin members:[ //members可以是组件的引用,也可以是在线create,组件成员也可以嵌套layout布局 isc.Label.create({ layoutAlign:"left|right|top|bottom|center", //member(这里指组件)对其方式 showResizeBar:true|false, //member之间是否显示调整大小栏 width:100, //注意,layout管理器不

  • 腾讯云日志服务API概览

    日志主题相关接口 接口名称 接口功能 CreateTopic 创建日志主题 DeleteTopic 删除日志主题 DescribeTopics 获取日志主题列表 ModifyTopic 修改日志主题 日志集相关接口 接口名称 接口功能 CreateLogset 创建日志集 DeleteLogset 删除日志集 DescribeLogsets 获取日志集列表 ModifyLogset 修改日志集 主题分区相关接口 接口名称 接口功能 DescribePartitions 获取分区列表 MergePartition 合并分区 SplitPartition 分裂主题分区 机器组相关接口 接口名称 接口功能 CreateMachineGroup 创建机器组 DeleteMachineGroup 删除机器组 DescribeMachineGroups 获取机器组列表 DescribeMachines 获取机器状态 ModifyMachineGroup 修改机器组 日志相关接口 接口名称 接

  • 腾讯云云数据库Tendis退费说明

    包年包月预付费:云数据库Tendis申请退货退款,每个主体默认享有1次5天内无理由全额退款,其余退款申请按照非全额退款处理。 按量计费后付费:云数据库Tendis直接清退资源,无法申请退款。以上均可在云数据库Tendis控制台的实例列表进行自助退还操作。 自助退还说明 包年包月实例自助退还后,实例的状态一旦变为“隔离中”时,就不再产生与该实例相关的费用。 包年包月实例彻底销毁后IP资源同时释放,实例无法访问。 包年包月实例自助退还后,实例被移入云数据库回收站保留7天,此时实例无法访问。如您想恢复已经自助退还的包年包月实例,可以在云数据库回收站进行续费恢复。 如出现疑似异常/恶意退货,腾讯云有权拒绝您的退货申请。 某些活动资源不支持自助退还,具体以官网展示为准。 五天无理由自助退还云数据库Tendis产品遵守腾讯云云服务退货说明,如果您在购买云数据库Tendis后有任何不满意,我们支持五天内无理由自助退还,具体规则如下: 每个主体下,包年包月预付费云数据库Tendis自新购之日起五天之内(含五天),默认享受1台云数据库五天无理由退还。 如出现疑似异常/恶意退货,腾讯云有权拒绝您的

  • 工程师文化:BAT 为什么不喊老板

        BAT员工之间不喊老板,也不喊姓名,而是用同学、花名,这是虚情假意?还是弘扬武侠文化?还是另有隐情?为什么欧美公司不这么做?本文将带大家走进科学,探索真相。 BAT的称呼方式 腾讯:英文名,例如Pony、Mujihuang(母鸡黄); 阿里:花名,例如风清扬、逍遥子、林黛玉; 字节跳动:名+同学,例如一鸣同学;    腾讯内网社区讨论英文名 官方解释 腾讯的解释: 在腾讯没有叫「X总」的习惯,互联网公司讲究组织结构扁平化,腾讯文化的关键词之一是「平等与尊重」。所以,为了弱化上下级概念,英文名就这么轻松又愉快地出现了。 字节跳动的解释: 为了避免形式感给基层节点带来压制,我们弱化层级,首先是不允许这种称呼——「老大」、「某某总」、「老师」,这种称呼一旦出来之后,很多想法就不能涌现出来了。他们可能会倾向于先听听「老师」有什么意见,自己不能先说出来。 管理学理论 在中国文化中,「指名道姓」是不尊重的表现。直呼长辈的姓名,就能感到这种不适。 姓,人所生也。古之神圣母,感天而生子,故称天子。——《说文解字》 所以,中国人往往使

  • 5、映射的思考

     学习了GPIO_newbule之后,一血关于映射上面的问题总结。 1、映射方法   实现映射的方法是通过:ioremap,IO_ADDRESS这两种方法,实现物理和虚拟地址的映射,它们返回的结果就是虚拟地址了,但是这两种方法的区别是:ioremap:动态映射,一般是在外围的控制器的地址。当映射的时间,是当加载相对应函数的是,才完成映射的操作。IO_ADDRESS :静态映射,一般是寄存器资源映射上,映射的时间是,当系统启动的时候,就完成映射的操作,1.1、IO_ADDRESS 的映射  物理地址=基址+偏移地址,所以使用IO_ADDRESS  进行地址映射的时候,存在两种映射,既直接使用物理地址映射和先对基址映射之后,再加上偏移地址,这两种映射的最终地址,都是一样的。方法一:#defineIOConfig        IO_ADDRESS(0x200f0000)//IO复用寄存器#defineH

  • C#常见编译报错

    mCaster.PlayAnim(ANIMID.ASTD);   No overload for method 'PlayAnim' takes '1' arguments   PlayAnim()内有两个参数,而代码里只传了一个参数 参数个数不对

  • iOS APP上线流程

    前言:前两天有个同事问到我APP上传的问题,几个地方我竟然模糊不清了,查了些资料在这里整理一下。鄙人是一个懒猿,一直以来都是从各位大神的博客中汲取营养,却懒于写自己的。越来越觉得写博客对于一个开发者来讲是很有帮助的,利己利人,所以以后也会努力去写。        废话不说了,下面来介绍应用上传APPStore具体流程: 1.打开苹果开发者中心:https://developer.apple.com 打开后点击:MemberCenter 如果你的电脑没有保存密码,则会提示你输入开发者帐号和密码,因为我的电脑已经保存了,所以直接进入。 2.点击:Certificates,Identifiers&Profiles 3.点击Devices 一.创建AppIDs和BoudleID 4.点击AppIDs,会进入如下界面,点击右上角的+号 5.填写AppIDs和BoudleID 6.点击continue 7.点击Submit 8.点击Done 二.创建发布证书(若已创建过发布证书,现在用的是p12文件,可直

  • Leetcode - 611. 有效三角形的个数 (快速判断三角形)

    思路: 如何判断三条边能否构成三角形?->三条边从小到大a、b、c当且仅当a+b>c,这三条边才能组成三角形 固定最长边,判断另外两条边 classSolution: deftriangleNumber(self,nums)->int: n=len(nums) res=0 nums=sorted(nums) foriinrange(n-1,1,-1): l,r=0,i-1 whilel<r: #说明l~r-1之间的值都与num[r]一切构成 ifnums[l]+nums[r]>nums[i]: res+=r-l r-=1 else: l+=1 returnres 复制

  • 码农的自我修养之必备技能

    一、Typing   作为一名程序员,打字能力是基础而又不可或缺的技能,十指打字+准确率+速度,二指禅是要不得的,这势必会影响coding的速度。   规范的打字手法加上练习,可以让你的打字速度快的飞起,在这里你可以测试自己的打字速度并循序渐进的练习,展示下我的练习进度。   还需要继续练习,当然这需要个过程,平时coding时也是练习的机会。 二、VisualStudioCode(VScode)   VScode是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、GIT等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持Win、Mac以及Linux。   其他的代码编辑器在打开特别大的文件时可能会有明显的卡顿,但是VSCode就是秒开。   VSvode特点:   开源,免费;   自定义配置   集成git  智能提示强大  支持各种文件格式(html/jade/css/less/sass/xml)  调试功能强大  各种方便的快捷键  强大的插件扩展

  • 如何为配置文件加密

    原创地址:http://www.cnblogs.com/jfzhu/p/4039216.html 转载请注明出处   在web.config或app.config文件里我们经常会存储一些敏感信息,比如connectionStrings或者appSettings,比如像下面的文件。 <?xmlversion="1.0"?> <configuration> <system.web> <compilationdebug="true"targetFramework="4.0"/> </system.web> <connectionStrings> <addname="MyNwConnectionString"connectionString="Server=myServerAddress;Database=myDataBase;UserId=myUsername;Password=myPassword;"/> </connectionStrings> <appSetting

  • 微信支付,支付宝支付,银联支付——三大支付总结

    转载: https://juejin.im/post/596d97576fb9a06bb874a812 银联支付,支付宝支付,微信支付的三大总结,之前也有写过两篇。 微信支付,支付宝支付,银联支付——三大支付总结: http://blog.csdn.net/androidstarjack/article/details/72669394 支付宝植入总结: android支付宝的植入《曾经踩过的坑》 微信支付总结: Android微信支付总结 备注:出于安全考虑,验签我们都是放到后台进行验签的。对于我们移动端节省了很多的劳动力。 之前有做过支付宝支付和微信支付,所以这次做起来碰到的问题很少,key申请下来之后很快就搞定了。吼吼 效果图:   Markdown   由于用鲁大师去截屏获取gif,鲁大师一针一针绘制图片的时候应该没做好处理,导致跳转到相应的界面出现黑屏现象。在手机上正常跳转,无黑屏现象。大家不用担心这个 准备: 需要以公司名义,在支付宝,微信等平台上开通公司账户并且认证,如:支付过程中需要公司的帐号和商户号。 支付宝支付 如果碰到一些坑的话

  • linux 挂载ntfs格式的硬盘

    一、安装ntfs 1.下载 sudowget  https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz 2.解压 sudotar zxvf ntfs-3g_ntfsprogs-2017.3.23.tgz 3.进入解压后的文件夹 4.sudo./configure 5.sudomake 6.sudomakeinstall 二、挂载 1.fdisk-l查看磁盘状况 2.mount-tntfs-3g/dev/sdb1/public 3.df-h查看挂载状况   坚持就是胜利、欧耶~

  • 《C++ API设计》 4.5 架构设计

    摘抄于《C++API设计》4.5 创建架构的过程步骤: 1.分析影响架构的功能性需求 2.识别架构的约束并说明 3.创造系统的主要对象,并确定之间的关系 4.架构交流与文档 架构的约束,影响架构的因素: 1.组织因素:预算、时间、团队大小、专业知识等等 2.环境因素:硬件、平台(window、mac、linux)、依赖的api、服务端约束、协议、文件格式、数据库、开发工具 3.运行因素:性能要求、内存利用率、并发性、扩展性、安全性、网络带宽等等 创建关键对象分类方法 1.自然语言:用语言描述,名词表示对象,动词表示函数、形容词为属性 2.属性:将相似属性、特性的对象分为一组 3.行为:根据行为的发起者和参与者推导出对象所属集合 4.原型:对各类对象找到更一般的原型,如懒人沙发、高脚椅、躺椅,原型都是椅子 5.领域(Shlaer-Mellor分类法):先对系统水平划分,创建一些通用领域。再对每个领域独立分析,进行垂直划分。 好处:易构成复用的概念。 架构模式 1.结构化模式:分层模式、管道与过滤器模式和黑板模式 2.交互式系统:模型-视图-控制器、模型-视图-表示器、表示-抽象-控制

  • Libpacp 深度剖析

    Libpacp深度剖析 1.Libpacp的工作原理 ​ Libpcap的工作原理可以描述为,当一个数据包到达网卡时,通过网络分接口(即旁路机制)将数据包发给BPF过滤器,匹配通过的数据包可以被libpcap利用创建的套接字PF_PACKET从链路层驱动程序中获得。进而在用户空间提供独立于系统的用户级API接口。 ​ 一个数据包的捕捉分为三个主要部分: 面向底层包捕获 面向中间层的数据包过滤 面向应用层的用户接口 这与Linux操作系统对数据包的处理流程是相同的。 网卡->网卡驱动->数据链路层->IP层->传输层->应用程序 2.Libpcap的实现机制 ​ 这里实现的包捕获机制是在数据链路层增加一个__旁路处理__,并不干扰系统自身的网路协议栈的处理,对发送和接收的数据包通过Linux内核做过滤和缓冲处理,最后直接传递给上层应用程序。因此libpcap在捕获到达网卡的数据包后绕开了传统linux协议栈处理,直接使用链路层PF_PACKET协议族原始套接字方式向用户空间传递报文。 本人是软件工程专业的在校大学本科生,喜欢编程的小伙伴

  • python 类进阶

    一、类成员 1、字段(属性) -静态字段(类属性) -普通字段(实例属性) 静态字段可以被类直接调用,也可以被实例调用,在创建类的时候创建; 普通字段只能被实例调用,在对象实例化的的时候创建。 classFoo: city='Beijing'#静态字段 def__init__(self): name='lilei'#普通字段 age=28#普通字段复制 >>>print(Foo.city)#静态字段可以被类直接调用 Beijing >>>f=Foo() >>>print(f.city)#静态字段可以被实例调用 Beijing >>>print(f.name)#普通字段只能被实例调用 lilei复制   2、方法 - 类中的函数称为方法 1、普通方法 classFoo: def__init__(self): self.name='lilei' self.age=18 defprint_name(self): ''' 普通方法print_name 每个普通方法的第一个参数是self,

相关推荐

推荐阅读