在本章的第一节我们已经学习了 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 定位一组元素相关推荐

  1. selenium学习-----tag name定位一组元素

    webdriver中有8中定位方法是针对单个元素定位的,同时也提供了8种用于定位一组元素的方法,单个元素定位和一组元素定位的其区别就在于多了s,有某有发现,来个复数就可以表示组了~~~~~~下边就罗列 ...

  2. 4.8 定位一组元素

    在本章的第一节我们已经学习了 8 种定位方法,那 8 种定位方法是真对单元素定位的,WebDriver 还 提供了与之对应的 8 种定位方法用于定位一组元素. find_elements_by_id( ...

  3. python元素定位input button_python+selenium 定位到元素,无法点击的解决方法

    报错 selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75 ...

  4. selenium定位隐藏元素

    面试官:"你是怎么使用selenium定位隐藏元素?". 我相信这是很多小伙伴在面试web自动化的时候经常遇到的问题.但是我想说,这个问题着实很无聊.为什么我会这么说呢 ? 做we ...

  5. Selenium3自动化测试——8.定位一组元素

    1. 实现目标 在百度浏览器中,搜索"selenium"后,输出搜索的第一页的所有title 2.实现代码 from time import sleep from selenium ...

  6. 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网站来举例,点击右上角的搜索框. 鼠标右击搜索 ...

  7. Selenium定位HTML元素(Python)

    本篇不是介绍通过各种方法(id, name, tag_name, css, xpath等)定位HTML各元素的普及性文章,网络上各种文档和博客介绍得均比较全面.这里只是将自己实践中,遇到的个别问题及解 ...

  8. selenium - webdriver - 定位一组元素

    八种方法: find_elements_by_id() find_elements_by_name() find_elements_by_class_name() find_elements_by_t ...

  9. 【selenium学习笔记一】python + selenium定位页面元素的办法。

    1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的 ...

  10. selenium定位到元素后获取其属性_selenium 元素查找与属性

    pip install selenium 2.selenium查找元素就八种方法 from selenium import webdriver driver=webdriver.Chrome() #说 ...

最新文章

  1. 深入Hotspot源码,搞清楚JVM的本质
  2. android网络请求回调管理,Android HTTP网络请求的异步实现
  3. jQuery中的text()、html()和val()以及innerText、innerHTML和value
  4. android点9图architecture
  5. Linux系列-Red Hat5平台下的Postfix邮件服务搭建(二)
  6. 解决安装Weblogic domain卡住问题(Primeton BPS)
  7. Spark单独集群模式部署
  8. asp.net 取windows的所有进程
  9. es6基本语法,vue基本语法
  10. 如何将SQL Server 2017主数据服务模型迁移到另一台服务器
  11. SpringBoot+jersey实现
  12. 银行突发事件演练方案_湘阴星龙村镇银行开展防抢劫应急预案实战演练
  13. chinapub matlab,MATLAB 2020从入门到精通
  14. 利用NSA方程式工具—“永恒之蓝”攻陷一台计算(MS17-010)
  15. 2021FME博客大赛 —— FME在无名河流水系实体化中的应用实践
  16. 关于麒麟!关于互联网
  17. bm算法好后缀 java实现_BM算法 | Depeng's Blog
  18. 【SQL server速成之路】数据库基础
  19. 思考是勤奋的一部分,人最大的懒惰是思想懒惰
  20. 单片机入门资料,按键消抖方式,按键怎么消抖

热门文章

  1. 干货分享!java进阶视频百度云
  2. easyui datagrid 可编辑单元格 显示 clear icon 和 放大镜图标
  3. #读书笔记—《自控力》第一章
  4. 网络创业者如何通过自己建站迈出躺赚第一步?
  5. 中考考试的指令广播_2016中招考试广播指导语
  6. html左边是菜单右边是内容,左首菜单栏右侧内容
  7. 智和网管:深入国产化需求,扎根网络运维安全
  8. java 输出26个大小写字母
  9. 计算机找不到WPS云盘,wps网盘在哪里打开及如何应用?
  10. Fast-Paced Multiplayer (Part I): Introduction