selenium 定位一组元素
在本章的第一节我们已经学习了 8 种定位方法,那 8 种定位方法是真对单元素定位的,WebDriver 还提供了与之对应的 8 种定位方法用于定位一组元素。
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
定位一组对象的方法与定位单个对象的方法类似,唯一的区别是在单词 element 后面多了一个 s 表示复数。定位一组对象一般用于以下场景:
- 批量操作对象,比如将页面上所有的复选框都被勾选。
- 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个。手动创建一个 checkbox.html 的页面,通过浏览器打开,效果如图: 为了使页面更美观,在代码中添加了 bootstrap 在线样式的引用。下面就通过例子来操作页面上的这一组复选框。
from selenium import webdriver import osdriver = webdriver.Firefox() file_path = 'file:///' + os.path.abspath('checkbox.html') driver.get(file_path)# 选择页面上所有的 tag name 为 input 的元素 inputs = driver.find_elements_by_tag_name('input')#然后从中过滤出 tpye 为 checkbox 的元素,单击勾选 for i in inputs:if i.get_attribute('type') == 'checkbox':i.click() driver.quit()
前面在提到通过 tag name 的定位方式很难定位到单个元素,因为元素标签名重复的概率很高。那么在定位一组元素时,这种方式就派上了用场。上面的例子中先通过 find_elements_by_tag_name()找到一组标签名为 input 的元素。然后通过 for 循环进行遍历。在遍历的过程中通过 get_attribute()方法获取元素的 type属性,判断是否为“checkbox”,如果为“checkbox”那么这个元素就是一个复选框。对其进行 click()勾选操作。
在本例中,因为通过浏览器打开的是一个本地的 html 文件,所以需要用到 Python 的 os 模块,path.abspath()方法用于获取当前路径下的文件。
除此之外,我们也可以使用 XPath 或 CSS 来判断属性值,从而进行点击操作。from selenium import webdriver import osdriver = webdriver.Firefox() file_path = 'file:///' + os.path.abspath('checkbox.html') driver.get(file_path)#通过 XPath 找到 type=checkbox 的元素 #checkboxes = driver.find_elements_by_xpath("//input[@type='checkbox']")#通过 CSS 找到 type=checkbox 的元素 checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]') for checkbox in checkboxes:checkbox.click()# 打印当前页面上 type 为 checkbox 的个数 print len(checkboxes)# 把页面上最后 1 个 checkbox 的勾给去掉 driver.find_elements_by_css_selector('input[type=checkbox]').pop().click() driver.quit()
通过 XPath 或 CSS 来查找一组元素,少去判断步骤,因为它本身已经做了判断,只需要循环对每一个元素进行 click()勾选即可。
除此之外例子中还用到了 Python 所提供的两个有趣的方法。len()可获取元素的个数,通过 print 打印会得到一个 3 的结果。pop() 函数用于获取列表中的一个元素(默认为最后一个元素),并且返回该元素的值。因为前的循环已经所有复选框都勾选上了,再对这一组元素执行 pop().lick() 其实是对后一个元素取消勾选。如果只想勾选一组元素中的某一个呢。
pop()或 pop(-1) 默认获取一组元素中的最后一个。
pop(0) 默认获取一组元素中的第一个。
pop(1) 默认获取一组元素中的第二个。
……
这样就可以操作这一组元素中的元素了,只用数一数操作的元素是这一组中的第几个。
selenium 定位一组元素相关推荐
- selenium学习-----tag name定位一组元素
webdriver中有8中定位方法是针对单个元素定位的,同时也提供了8种用于定位一组元素的方法,单个元素定位和一组元素定位的其区别就在于多了s,有某有发现,来个复数就可以表示组了~~~~~~下边就罗列 ...
- 4.8 定位一组元素
在本章的第一节我们已经学习了 8 种定位方法,那 8 种定位方法是真对单元素定位的,WebDriver 还 提供了与之对应的 8 种定位方法用于定位一组元素. find_elements_by_id( ...
- python元素定位input button_python+selenium 定位到元素,无法点击的解决方法
报错 selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75 ...
- selenium定位隐藏元素
面试官:"你是怎么使用selenium定位隐藏元素?". 我相信这是很多小伙伴在面试web自动化的时候经常遇到的问题.但是我想说,这个问题着实很无聊.为什么我会这么说呢 ? 做we ...
- Selenium3自动化测试——8.定位一组元素
1. 实现目标 在百度浏览器中,搜索"selenium"后,输出搜索的第一页的所有title 2.实现代码 from time import sleep from selenium ...
- python元素定位id和name_Python Selenium定位html元素|find_element_by_class-name-id-tag-css-xpath-text...
Selenium官方给了八种定位方法 1.find_element_by_class_name通过class name定位元素 我们拿Pythonfree网站来举例,点击右上角的搜索框. 鼠标右击搜索 ...
- Selenium定位HTML元素(Python)
本篇不是介绍通过各种方法(id, name, tag_name, css, xpath等)定位HTML各元素的普及性文章,网络上各种文档和博客介绍得均比较全面.这里只是将自己实践中,遇到的个别问题及解 ...
- selenium - webdriver - 定位一组元素
八种方法: find_elements_by_id() find_elements_by_name() find_elements_by_class_name() find_elements_by_t ...
- 【selenium学习笔记一】python + selenium定位页面元素的办法。
1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的 ...
- selenium定位到元素后获取其属性_selenium 元素查找与属性
pip install selenium 2.selenium查找元素就八种方法 from selenium import webdriver driver=webdriver.Chrome() #说 ...
最新文章
- 深入Hotspot源码,搞清楚JVM的本质
- android网络请求回调管理,Android HTTP网络请求的异步实现
- jQuery中的text()、html()和val()以及innerText、innerHTML和value
- android点9图architecture
- Linux系列-Red Hat5平台下的Postfix邮件服务搭建(二)
- 解决安装Weblogic domain卡住问题(Primeton BPS)
- Spark单独集群模式部署
- asp.net 取windows的所有进程
- es6基本语法,vue基本语法
- 如何将SQL Server 2017主数据服务模型迁移到另一台服务器
- SpringBoot+jersey实现
- 银行突发事件演练方案_湘阴星龙村镇银行开展防抢劫应急预案实战演练
- chinapub matlab,MATLAB 2020从入门到精通
- 利用NSA方程式工具—“永恒之蓝”攻陷一台计算(MS17-010)
- 2021FME博客大赛 —— FME在无名河流水系实体化中的应用实践
- 关于麒麟!关于互联网
- bm算法好后缀 java实现_BM算法 | Depeng's Blog
- 【SQL server速成之路】数据库基础
- 思考是勤奋的一部分,人最大的懒惰是思想懒惰
- 单片机入门资料,按键消抖方式,按键怎么消抖