Selenium定位元素操作示例
作者:喷跑的豆子 发布时间:2022-01-21 04:23:56
本文实例讲述了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_element
和find_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程序设计有所帮助。
来源:https://blog.csdn.net/y472360651/article/details/79659968


猜你喜欢
- 解决方法如下: 在Firefox地址栏里输入 about:config 在配置列表中找到dom.allow_scripts_to_close
- table估计每个跟web打过交道的人都会经常接触到,跟js结合能做出很多不错的体验。这里打算结合js做一个系列,包括一些操作和效果,虽然现
- 对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏感字段脱敏,包括用户姓名、证件号、地址等等,下面是自定义函数的代码CR
- word2vec介绍word2vec官网:https://code.google.com/p/word2vec/word2vec是googl
- 1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象
- 最近有个需求,一个列表上下移动要有简单过渡效果,在网上找了找没找到,可能是我搜的关键词不对?试了试 Vue 的 transition-gro
- 我就废话不多说了,大家还是直接看代码吧~import tensorflow as tffrom sklearn.metrics import
- 1. 案例【三酷猫列表记账】操作需求:(1)用列表对象记录三酷猫每天钓鱼的种类和数量(2)统计三酷猫所钓水产品的总数量和预计收获金额(3)打
- 第一章:连接 FTP 服务器并实现文件夹下载① 连接 FTP 服务器如果 FTP 不用用户名密码就直接可以访问,那就是用的默认用户名 Ano
- 前端使用uniapp开发项目完成后,需要将页面打包,生成H5的静态文件,部署在服务器上。这样通过服务器链接地址,直接可以在手机上点开来访问。
- 引子闭包是有权访问另一个函数作用域中的变量的函数。闭包是javascript中很难理解的部分,很多高级的应用都依靠闭包来实现的,我们先来看下
- 案例package mainimport ( _ "github.com/go-sql-driver/mysql&q
- 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS
- display text in large ASCII art fonts 显示大ASCII艺术字体这种东西在源码声明或者软件初始化控制台打
- 方式1.打开Windows的cmd,在cmd中输入jupyter notebook --generate-config如下图:
- HAVE_VFORK 是一个宏定义,用于表示当前 Python 解释器是否支持 vfork() 系统调用。vfork() 是一个类似于 fo
- 一. 什么是模块(module)?在实际应用中,有时程序所要实现功能比较复杂,代码量也很大。若把所有的代码都存储在一个文件中,则不利于代码的
- 微信小程序 scroll-view实现上拉加载与下拉刷新的实例实现效果图:如图,使用小程序的scroll-view实现的上拉加载数据,下拉刷
- 简介with的基本表达式如下with context_expression [as target(s)]: ...
- 目的:同步本地和服务器的全部或者部分文件本地debug,服务器跑实验需要条件:服务器上已经创建好虚拟环境你本地已经安装好pycharm1.1