webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法。

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

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

checkbox.html

  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. <div class="control-group">
  32. <label class="control-label" for="r">radio</label>
  33. <div class="controls">
  34. <input type="radio" id="r" />
  35. </div>
  36. </div>
  37. </form>
  38. </div>
  39. </body>
  40. </html>

此脚本需要与自动化脚本同一目录下。

将html打开显示如下图所示:

可看出共打开三个复选框,一个单选框。

方法一:定位三个复选框

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

这里input的attribute类型有checkbox,也有radio,也可以将其设为radio,则可将其选中。

第二种方法:

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

两种方式都是通过循环来选中元素,两种方法定位时不同,一个是name,一个是css方式。

上面两种方法都是将同一类型的复选框全部选中的方法,那如何只取其中的几个呢。实现方式可以是先全部选中,再去掉某个。

如何去掉勾选:

把最后一个选中复选框去掉方法。

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

去掉勾选的逻辑就是先选中,然后再次点击取消选中。在此使用的方法的pop()方法即删除最后一个元素。

webdriver(python)学习笔记四——定位一组元素的更多相关文章

  1. webdriver(python)学习笔记六——操作测试对象

    定位到具体对象后,就需要对其进行操作,比如点击.输入内容等. 一般来说,webdriver中比较常用的操作对象的方法有下面几个 click 点击对象 send_keys 在对象上模拟按键输入 clea ...

  2. webdriver(python)学习笔记七——多层框架定位与智能等待

    多层框架或窗口定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 现在web应用中经常会遇到框架如(frame)或窗口(w ...

  3. webdriver(python)学习笔记五——层级定位

    层级定位 在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个.由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位.先定位父元素, ...

  4. webdriver(python) 学习笔记三

    知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...

  5. python 学习笔记(四) 统计序列中元素出现的频度(即次数)

    案例一:在某随机序例中,找到出现频度最高的3个元素,它们出现的次数是多少? from random import randint # 利用列表解析器生成随机序列,包含有30个元素 data = [ra ...

  6. Python学习笔记四--字典与集合

    字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...

  7. Python学习笔记四

    一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...

  8. python学习笔记(四)、条件、循环及其他语句

    1 再谈print和import 1.1 打印多个参数 print 能够同时打印多个表达式,并且能自定义分隔符.如下: print('a','b','c') ——> a b c print('a ...

  9. python学习笔记(2)--基本语法元素

    来看一个非常简单的温度转换程序 #Tempconvert.py tempstr = input("输入:") if tempstr[-1] in ['F', 'f']: C = ( ...

随机推荐

  1. POJ 1125 Stockbroker Grapevine(floyd)

    http://poj.org/problem?id=1125 题意 : 就是说想要在股票经纪人中传播谣言,先告诉一个人,然后让他传播给其他所有的经纪人,需要输出的是从谁开始传播需要的时间最短,输出这个 ...

  2. Python图片转换成矩阵,矩阵数据转换成图片

    # coding=gbk from PIL import Image import numpy as np # import scipy def loadImage(): # 读取图片 im = Im ...

  3. 解决Eclipse10配置Pydev不成功的问题

    本人在线配置还在本地配置后 重启Eclipse,Windows-Preferences中并无Python选项,新建项目也无Python可选 这个尝试了好多种方法,重新安装Eclipse10,重新安装j ...

  4. AutoEventWireup解释

    这一事件聚合了当前页是否自动关联某些特殊事件. 首先,从浏览器页面出发的事件不能立刻在本地得到处理,而是POST至服务器上,因此,asp.net建立了委托(代理)机制.在建立一个事件的同事,建立相应的 ...

  5. Java学习笔记之:Java引用数据类型之字符串

    一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...

  6. 244. Shortest Word Distance II

    题目: This is a follow up of Shortest Word Distance. The only difference is now you are given the list ...

  7. 5、处理模型数据ModelAndView、Map、Model以及@SessionAttributes注解

    Spring MVC提供了以下几种途径输出模型数据 —— ModelAndView: 处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据.数据会添加到request域中. ...

  8. 实例学习Bloom Filter

    0. 科普1. 为什么需要Bloom Filter2. 基本原理3. 如何设计Bloom Filter4. 实例操作5. 扩展 0. 科普 Bloom Filter是由Bloom在1970年提出的一种 ...

  9. VCC_VID_VTT等的含义

    VCC--为直流电压.在主板上为主供电电压或一般供电电压.例如 一般电路VCC3--+3V供电.主板上VCC3: 3.3V VCC25: 2.5V VCC333: 3.3V VCC5: 5V VCC1 ...

  10. MyEclipse中使用JUnit进行单元测试

    1. 下载JUnit的jar文件,下载地址在这里 2. 在MyEclipse中新建一个要测试的项目HelloJUnit 3. 添加一个要测试的类HelloJUnit,代码如下,注意需要先建packag ...