Selenium定位元素操作示例

本文实例讲述了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>

我们可以这样对

元素进行定位:

element = driver.find_element_by_tag_name("p")

通过类名进行定位

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

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

我们可以这样对

元素进行定位:

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>

我们可以这样对

元素进行定位:

element = driver.find_element_by_css_selector('body p')

selenium处理元素定位点击无效问题

在WEB自动化测试过程中,经常会遇到这样的问题:

元素定位到了,但是点击无效?有人可能会问了,怎么判断元素定位到了,这个问题很好判断

1.给元素加高亮显示

  self.driver.execute_script("arguments[0].setAttribute('style', arguments[1]);",element,"border: 2px solid red;" #边框border:2px; red红色)

arguments[0] 这个参数,可以理解为python中的字符串格式化。比如"{}{}".format(‘aaa’,‘bbbb’)

2.执行点击过程不报错。

不会报一些找不到元素之类的错误。

怎么判断元素定位到了,点击没成功(这里说一下,一般是做了点击操作,只是我们直观去判断没有点击成功)

那么,现在来说一下如何解决这个问题。

解决问题:

1.分析一下,默认selenium的点击操作是点元素0,0点坐标,那么我们可以在元素x,y坐标上加5,让点击操作往里一点。

导入包ActionChains,

from selenium.webdriver.common.action_chains import ActionChains
ele = self.find_element(*loc)
ActionChains(driver).move_to_element(ele).move_by_offset(5,5).click().perform()

通过如上代码,先定位元素,然后移动到元素,在元素基础上做偏移x,y 5,5然后点击。

需要注意的是最后的perform()。要加上这个。否则不生效。

2.通过js去点击元素。

可以通过dom去定位,或者jquery定位。然后点击操作。这里不具体说明了。可以找度娘。

3.可以分析代码,如果有直接调用函数的地方,可以通过js直接调用。

要说明的是,这个方法,一般不可行。因为js前端代码会压缩加密。所以上线后我们看到的是压缩的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

Selenium定位元素操作实例详解相关推荐

  1. Quill编辑器操作实例详解

    今天分享下"Quill编辑器操作实例详解"这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习一下吧. ...

  2. 微信小程序php返回数组,微信小程序 数组(增,删,改,查)等操作实例详解...

    微信小程序 数组(增,删,改,查)等操作 最近在做一个小程序的demo.由于不向后台请求数据,所以就涉及到对本地数据的操作,也遇到了一些坑,本文就以数组的增删改查为例,给新手分享一些经验. 首先这是原 ...

  3. mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

    本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...

  4. python代码覆盖率测试_unittest+coverage单元测试代码覆盖操作实例详解_python

    这篇文章主要为大家详细介绍了unittest+coverage单元测试代码覆盖操作的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 基于上一篇文章,这篇文章是关于使用coverage来实现代码 ...

  5. android代码删除wifi,Android Wifi的forget()操作实例详解_Android_脚本之家

    Android  Wifi的forget()操作实例详解 我们在处理某个Wifi连接时,有时会需要忘掉当前连接的密码信息.执行这项操作,我们需要调用WifiManager::forget()函数: / ...

  6. php gearman 定时任务,php使用gearman进行任务分发操作实例详解

    php使用gearman进行任务分发操作实例详解,创建一个,客户端,操作,实例,回调 php使用gearman进行任务分发操作实例详解 易采站长站,站长之家为您整理了php使用gearman进行任务分 ...

  7. mysql resulttype map_Mybatis中的resultType和resultMap查询操作实例详解

    resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题.比 ...

  8. python爬虫之Scrapy框架原理及操作实例详解、股票数据Scrapy爬虫

    爬虫框架 -scrapy.pyspider.crawley等 Scrapy框架 1.scrapy框架介绍 -https://doc.scrapy.org/en/latest/ -http://scra ...

  9. python random库生成伯努利随机数的方法_Python使用random模块生成随机数操作实例详解...

    本文实例讲述了Python使用random模块生成随机数操作.分享给大家供大家参考,具体如下: 今天在用Python编写一个小程序时,要用到随机数,于是就在网上查了一下关于Python生成各种随机数的 ...

最新文章

  1. 北京全年天气状况分析
  2. win8如何在已安装多系统的情况下,更改默认开机系统
  3. Batch Normalization深入理解
  4. oracle job定时报错,Oracle Job定时任务的使用详解
  5. Three.js使用PointerLockControls控制相机实现第一人称视角
  6. C#调用C++的DLL搜集整理的所有数据类型转换方式
  7. cocostudio的TextField空件实现光标。
  8. python+opencv+图像几何变换(图片缩放、剪切、位移、镜像,放射变换,旋转)
  9. 重装系统win10安装教程(超详细)
  10. 阿里云服务器使用步骤详解
  11. 读余华《活着》,你好,我叫福贵
  12. JMeter参数大小写转换
  13. matlab 中画箭头
  14. 可道云需要配置MySQL吗_可道云kodexplorer搭建私有云后的配置优化
  15. 收益率的分解 无风险利率
  16. Android二维码多码识别,相册选择二维码,自定义扫码界面
  17. python定义字符串_Python定义字符串、循环
  18. 这些芯片知识,你知多少
  19. 计算机主机通常包括( ) a运算器,通常我们把( )称为计算机主机. A. 运算器 B. 运算器.控制器和内存 C. 运算器和控制器 D. 运算器和内存...
  20. 钱宝事件,是什么让你们如此疯狂呢?

热门文章

  1. led灯模组是什么东西_现代灯具什么牌子好 节能LED灯新品推荐
  2. TryParse方法集
  3. php 构造函数的继承
  4. 在屏幕上显示一个短句c语言编程,在屏幕上显示Hllo.ppt
  5. CDM—码分复用(简单易懂)
  6. Magento 账单地址里要去掉某些州
  7. WIN10 x86环境部署ARM虚拟机(CENTOS)实例
  8. VC6.0 C++编程错误error LNK2001
  9. Android Studio简单计算器App实现
  10. python模型预测足球_采用 Python 机器学习预测足球比赛结果!买谁赢就谁赢!