使用findElements方法定位一组对象

定位一组对象一般用于以下场景:

· 批量操作对象,比如将页面上所有的checkbox都勾上

· 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  4. <title>Checkbox</title>
  5. <script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  6. <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
  7. <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
  8. </head>
  9. <body>
  10. <h3>checkbox</h3>
  11. <div class="well">
  12. <form class="form-horizontal">
  13. <div class="control-group">
  14. <label class="control-label" for="c1">checkbox1</label>
  15. <div class="controls">
  16. <input type="checkbox" id="c1" />
  17. </div>
  18. </div>
  19. <div class="control-group">
  20. <label class="control-label" for="c2">checkbox2</label>
  21. <div class="controls">
  22. <input type="checkbox" id="c2" />
  23. </div>
  24. </div>
  25. <div class="control-group">
  26. <label class="control-label" for="c3">checkbox3</label>
  27. <div class="controls">
  28. <input type="checkbox" id="c3" />
  29. </div>
  30. </div>
  31.  
  32. <div class="control-group">
  33. <label class="control-label" for="r">radio</label>
  34. <div class="controls">
  35. <input type="radio" id="r1" />
  36. </div>
  37. </div>
  38.  
  39. <div class="control-group">
  40. <label class="control-label" for="r">radio</label>
  41. <div class="controls">
  42. <input type="radio" id="r2" />
  43. </div>
  44. </div>
  45. </form>
  46. </div>
  47. </body>
  48. </html>

将这段代码保存复制到记事本中,将保存成checkbox.html文件。(注意,这个页面需要和我们的自动化脚本放在同一个目录下)

第一种方法:

通过浏览器打个这个页面我们看到三个复选框和两个单选框。下面我们就来定位这三个复选框。

  1. # -*- coding: utf-8 -*-
  2. from selenium import webdriver
  3. import time
  4. import os
  5.  
  6. dr = webdriver.Firefox()
  7. file_path = 'file:///' + os.path.abspath('checkbox.html')
  8. dr.get(file_path)
  9.  
  10. # 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之
  11. inputs = dr.find_elements_by_tag_name('input')
  12. for input in inputs:
  13. if input.get_attribute('type') == 'checkbox':
  14. input.click()
  15. time.sleep(2)
  16.  
  17. dr.quit()

你可以试着把input.get_attribute('type') == 'checkbox' 中的checkbox 变成radio ,那这个脚本定位的会是两个单选框。

第二种定位方法:

  1. # -*- coding: utf-8 -*-
  2. from selenium import webdriver
  3. import time
  4. import os
  5.  
  6. dr = webdriver.Firefox()
  7. file_path = 'file:///' + os.path.abspath('checkbox.html')
  8. dr.get(file_path)
  9.  
  10. # 选择所有的checkbox并全部勾上
  11. checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
  12. for checkbox in checkboxes:
  13. checkbox.click()
  14. time.sleep(2)
  15.  
  16. # 打印当前页面上有多少个checkbox
  17. print len(dr.find_elements_by_css_selector('input[type=checkbox]'))
  18. time.sleep(2)
  19.  
  20. dr.quit()

第一种用的name ,第二种用的CSS 。

 如何去掉勾选:

还有一个问题,有时候我们并不想勾选页面的所有的复选框(checkbox),可以通过下面办法把最后一个被勾选的框去掉。如下:

  1. # -*- coding: utf-8 -*-
  2. from selenium import webdriver
  3. import time
  4. import os
  5.  
  6. dr = webdriver.Firefox()
  7. file_path = 'file:///' + os.path.abspath('checkbox.html')
  8. dr.get(file_path)
  9.  
  10. # 选择所有的checkbox并全部勾上
  11. checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
  12. for checkbox in checkboxes:
  13. checkbox.click()
  14. time.sleep(2)
  15.  
  16. # 把页面上最后1个checkbox的勾给去掉
  17. dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
  18. time.sleep(2)
  19.  
  20. dr.quit()

其实,去掉勾选表也逻辑也非常简单,就是再次点击勾选的按钮。可能我们比较迷惑的是如何找到“最后一个”按钮。pop() 可以实现这个功能。

好吧!在web自动化的学习过程中,我们必须要知道一些前端的东西,这里扩展一下:

http://www.w3school.com.cn/js/jsref_pop.asp

python selenum ---如何定位一组元素的更多相关文章

  1. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  2. Python+selenium(定位一组元素)

    我们熟知Webdriver有8种定位元素的方法,但是当需要定位一组元素的时候,可以使用Webdriver提供的与之对应的8种用于定位一组元素的方法,分别是: find_elements_by_id() ...

  3. Selenium2+python自动化11-定位一组元素find_elements

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  4. Selenium 2自动化测试实战14(定位一组元素)

    一.定位一组元素 WebDriver还提供了与前面所对应的8钟用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个S表示复数.定位一组元素一 ...

  5. 2.8 定位一组元素elements

    2.8 定位一组元素elements 前言    前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象.webdriver 提 ...

  6. Selenium2学习(七)-- 定位一组元素find_elements

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  7. seleniumu 3.0复选框操作(定位一组元素)

    一般验证复选框是否可以选择点击常用到定位一组元素去循环遍历执行点击事件.但是有时候在不同的浏览器下可能会存在差异化的最终结果. 目前谷歌浏览器常常存在多次点击同一复选框,导致最终最后两项复选框均未被勾 ...

  8. Selenium2+python自动化11-定位一组元素find_elements【转载】

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  9. webdriervAPI(定位一组元素)

    通过定位一组元素的方法来,来勾选自己需要勾选的选项. from selenium import webdriver from selenium.common.exceptions import NoS ...

随机推荐

  1. 【LCA】BZOJ1832 & BZOJ1787(AHOI)-集会

    [题目大意] 一个图有n个点n-1条边(也就是说是一棵树),求其中三点共同到达某一点经过总共的最少边数以及共同到达的那一点. [思路] 借用一下黄学长给的结论:三个点两两取LCA,其中必有两个相同,则 ...

  2. bzoj 3312: [Usaco2013 Nov]No Change

    3312: [Usaco2013 Nov]No Change Description Farmer John is at the market to purchase supplies for his ...

  3. iptables最常用的规则示例

    iptables v1.4.21 iptables基础 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”.规则存储在内核空间的信息 ...

  4. 关于push动画中尺寸问题

    由于是在sb中写的VC, 所以在跳转动画时, 就会有一些问题. 这是sb中的约束: 当在push动画时, 在中间界面添加imageView时, 如图: imageView的尺寸是如上图所示, 并不是屏 ...

  5. The file “Info.plist” couldn’t be opened because there is no such file

    修改了Info.plist的实际文件位置(项目和单元测试对应不同的Info.plist),报错 (null): could not read data from '/Users/xxxxx/Deskt ...

  6. juqery.fn.extend和jquery.extend

    jquery.fn == jquery.prototype //true jquery.extend( obj1,obj2 ) 用一个或多个对象来拓展一个对象,返回拓展之后的对象 var aaa = ...

  7. Mybatis数据库操作的返回值

    mybatis配置 <!-- 配置mybatis --> <bean id="sqlSessionFactory" class="org.mybatis ...

  8. 如何使用 awk 的 ‘next’ 命令

    导读 在 awk 系列文章中,我们来看一下next 命令 ,它告诉 awk 跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行.next 命令帮助你阻止运行命令执行过程中多余的步骤. 要明白它 ...

  9. 机器学习基石第一讲:the learning problem

    博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) Andrew Ng的Machine Learning比較简单,已经看完.林田轩的机器 ...

  10. gitlab多人协同工作 ——转

    http://www.360doc.com/content/14/0508/17/14416931_375851686.shtml