Selenium定位元素操作示例


Posted in Python onAugust 10, 2018

本文实例讲述了Selenium定位元素操作。分享给大家供大家参考,具体如下:

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

在前面一篇《Selenium基本用法》中简单记录了Selenium的使用,接下来记录一下元素的定位,Selenium提供了多种策略来定位页面中的元素,Selenium提供了以下方法来定位页面中元素,你可以根据自己的喜好来进行选择:

  • find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素
  • find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素
  • find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素
  • find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素
  • find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素
  • find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素
  • find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素
  • find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素

值得注意的是,上面方法只会匹配查找只会获取第一个元素。除了上面这些查找单个元素的方法之外,Selenium还定义查找多个元素的方法:

  • find_elements_by_name:通过name进行匹配查找,返回所有匹配到的元素列表
  • find_elements_by_xpath:通过xpath进行匹配查找,返回所有匹配到的元素列表
  • find_elements_by_link_text:通过链接内容进行匹配查找,返回所有匹配到的元素列表
  • find_elements_by_partical_link_text:通过部分链接内容进行匹配查找,返回所有匹配到的元素列表
  • find_elements_by_tag_name:通过标签名称进行匹配查找,返回所有匹配到的元素列表
  • find_elements_by_class_name:通过class名称进行匹配查找,返回所有匹配到的元素列表
  • find_elements_by_css_selector:通过CSS选择器进行匹配查找,返回所有匹配到的元素列表

除了上面给出的公有方法之外,Selenium还提供了两种私有方法可能对页面对象中的定位器有用,这两个私有方法是:find_elementfind_elements

from selenium.webdriver.common.by import By
element = driver.find_element(By.XPATH,'//*[@id="su"]')
elements = driver.find_elements(By.XPATH,'//button')

下面是By可用的属性:

ID = 'id'
NAME = 'name'
XPATH = 'xpath'
LINK_TEXT = '链接内容'
PARTIAL_LINK_TEXT = '部分链接内容'
TAG_NAME = '标签名称'
CLASS_NAME = '类名'
CSS_SELECTOR = 'CSS选择器'

通过ID定位

当你知道元素的ID属性时,你可以使用它,使用此策略,将返回ID属性值与该匹配的第一个元素。如果没有元素匹配到此ID属性,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:

<input id="login_id" type="text"/>

我们知道了这个元素的ID,我们可以这样进行定位:

element = driver.find_element_by_id('login_id')

通过name定位

当你知道元素的name属性时,你可以使用它,使用此策略,将返回name属性值与该匹配的第一个元素。如果没有元素匹配到此name属性,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:

<input name="login" type="text"/>

我们知道了这个元素的name,我们可以这样进行定位:

element = driver.find_element_by_name('login')

通过XPath定位

XPath是用于在XML文档中查找节点的语言,由于XML可以是HTML的实现,因此Selenium用户可以利用这种强大的语言来定位其Web应用程序中的元素。XPath扩展了通过id和name属性定位的简单方法,并打开了各种新的可能性,例如在页面中查找第三个复选框。举个栗子,有这样一个数据源:

<html>
 <body>
 <form id="loginForm">
  <input name="username" type="text" />
  <input name="password" type="password" />
  <input name="continue" type="submit" value="Login" />
  <input name="continue" type="button" value="Clear" />
 </form>
</body>
<html>

我们可以这样进行定位:

user_element = driver.find_element_by_xpath("/html/body/form/input[@name='username']")

或者

user_element = driver.find_element_by_xpath("/html/body/form/input")

或者

user_element = driver.find_element_by_xpath('//input[1]')

或者

user_element = driver.find_element_by_xpath("//input[@name='username'][@type='text']")

通过链接内容定位

当你知道链接元素的内容时,你可以使用它,使用此策略,将返回链接内容与该匹配到的第一个元素。如果没有元素匹配到此链接内容,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:

<html>
 <body>
 <p>Are you sure you want to do this?</p>
 <a href="continue.html" rel="external nofollow" rel="external nofollow" >Continue</a>
 <a href="cancel.html" rel="external nofollow" >Cancel</a>
</body>
<html>

其中<a href="continue.html" rel="external nofollow" rel="external nofollow" >Continue</a>元素可以这样定位:

element = driver.find_element_by_link_text('Continue')

或者

element = driver.find_element_by_partical_link_text('Con')

通过标签名称定位

当你知道标签的名称时,你可以使用它,使用此策略,将返回标签名称与该匹配到的第一个元素。如果没有元素匹配到此标签名称时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:

<html>
 <body>
 <h1>Welcome</h1>
 <p>Site content goes here.</p>
</body>
<html>

我们可以这样对<p>元素进行定位:

element = driver.find_element_by_tag_name("p")

通过类名进行定位

当你知道类名的时候,你可以使用它,使用此策略,将返回类名与该匹配到的第一个元素。如果没有元素匹配到此类名称时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:

<html>
 <body>
 <p class="content">Site content goes here.</p>
</body>
<html>

我们可以这样对<p>元素进行定位:

element = driver.find_element_by_class_name('content')

通过CSS选择器进行定位

当你想通过CSS选择器语法找到一个元素时,你可以使用它,使用此策略,将返回匹配CSS选择器的第一个元素。如果没有元素匹配到此CSS选择器时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:

<html>
 <body>
 <p class="content">Site content goes here.</p>
</body>
<html>

我们可以这样对<p>元素进行定位:

element = driver.find_element_by_css_selector('body p')

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python thread 并发且顺序运行示例
Apr 09 Python
Python3基础之函数用法
Aug 13 Python
Django实现图片文字同时提交的方法
May 26 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
python爬取酷狗音乐排行榜
Feb 20 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python中pygame安装过程(超级详细)
Aug 04 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
判断python字典中key是否存在的两种方法
Aug 10 #Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 #Python
Selenium(Python web测试工具)基本用法详解
Aug 10 #Python
Python生成器generator用法示例
Aug 10 #Python
python 字典修改键(key)的几种方法
Aug 10 #Python
详解python 注释、变量、类型
Aug 10 #Python
python文件操作之批量修改文件后缀名的方法
Aug 10 #Python
You might like
php输出xml必须header的解决方法
2014/10/17 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
js 幻灯片的实现
2011/12/06 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
Vue 获取数组键名的方法
2018/06/21 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python切图九宫格的实现方法
2019/10/10 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
员工考核管理制度
2014/02/02 职场文书
单方投资意向书
2015/05/11 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
毕业典礼致辞
2015/07/29 职场文书
八年级英语教学反思
2016/02/15 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python