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实现一个简单的银行转账操作
Mar 06 Python
Python使用gensim计算文档相似性
Apr 10 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
用python写测试数据文件过程解析
Sep 25 Python
如何利用Python识别图片中的文字
May 31 Python
Python实现弹球小游戏
Aug 01 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
python实现马丁策略的实例详解
Jan 15 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
最小化数据传输――在客户端存储数据
2006/10/09 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Prototype Class对象学习
2009/07/19 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python计算三角函数之asin()方法的使用
2015/05/15 Python
Python 12306抢火车票脚本
2018/02/07 Python
对python中Json与object转化的方法详解
2018/12/31 Python
如何运行带参数的python脚本
2019/11/15 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
致铅球运动员加油稿
2014/02/13 职场文书
教师党员一句话承诺
2014/03/28 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
python中的getter与setter你了解吗
2022/03/24 Python