一、定位一组元素

WebDriver还提供了与前面所对应的8钟用于定位一组元素的方法。
定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个S表示复数。定位一组元素一般用于以下场景:
(1)批量操作元素,例如勾选页面上所有的复选框。
(2)先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位出页面上所有的CheckBox,然后选择其中的一个进行操作。

#checkbox.html
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Checkbox</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
<script
src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js" ></script>
</head> <body>
<h3>checkbox</h3>
<div class="well" >
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="cl" >checkbox1</label>
<div class="controls">
<input type="checkbox" id="cl" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="c2">checkbox2</label>
<div class="controls">
<input type="checkbox" id="c2" />
</div>
</div> <div class="control-group">
<label class="control-label" for="c3">checkbox3</label>
<div class="controls">
<input type="checkbox" id="c3" />
</div>
</div>
</form>
</div>
</body>
</html>

这是手动创建的一个html页面,用浏览器打开如下图所示

通过一个实例来操作页面上的这一组复选框

#checkbox.py
#coding:utf-8
from selenium import webdriver
import os,time driver=webdriver.Chrome()
file_path='file:///'+os.path.abspath('checkbox.html')
driver.get(file_path) #选择页面上所有的tag name为input的元素
inputs=driver.find_elements_by_tag_name('input') #然后从中过滤出type为checkbox的元素,单击勾选
for i in inputs:
if i.get_attribute('type') == 'checkbox':
i.click()
time.sleep(1) driver.quit()

在上面的这个例子中先通过find_elements_by_tag_name()找到一组标签名为input的元素,然后通过for循环进行遍历,在遍历过程中,通过get_attribute()方法获取元素的type属性是否为“checkbox”,如果为“checkbox”,就认为这个元素是一个复选框,对其进行勾选操作。
这里用到了Python的OS模块,path.abspath()方法用于获取当前路径下的文件。

#checkbox.py
#coding:utf-8
from selenium import webdriver
import os,time driver=webdriver.Chrome()
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()
time.sleep(1) #打印当前页面上type为checkbox的个数
print(len(checkboxes)) #把页面上最后1个checkbox的勾给去掉
driver.find_elements_by_css_selector('input[type=checkbox]').pop().click() driver.quit()

通过xpath或css来查找一组元素是,省去了判断步骤,因为定位方法已经做了判断,只需循环对这一组元素进行勾选即可。
上例中,用到了两个方法,
(1)len()方法可以用来计算元素的个数,通过print()打印出计算的结果。
(2)pop()方法用于获取列表中的一个元素(默认为最后一个元素),并且返回该元素的值。因为前面的循环已经将所有复选框都勾选上了,再对这一组元素执行pop().click(),其实是对最后一个元素取消勾选。
    pop()或pop(-1): 默认获取一组元素中的最后一个
    pop(0):获取一组元素中的第一个
    pop(1):获取一组元素中的第二个
    ……..
  这样就可以操作一组元素中的任意一个元素了,只需数一数需操作的元素是这一组中的第几个。

Selenium 2自动化测试实战14(定位一组元素)的更多相关文章

  1. Selenium+Python自动化测试实战(2)元素定位

    1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...

  2. Selenium 2自动化测试实战13(设置元素等待)

    一.设置元素等待 若在加载某个元素时延迟而造成的ElementNotVisbleException的情况出现,那么就会降低自动化脚本的稳定性,可以通过设置元素等待改善这种问题造成的不稳定. webdr ...

  3. Selenium 2自动化测试实战9(简单元素操作)

    一.简单元素操作 1. webdriver中常用的几个方法: clear():清除文本 send_keys(*value):模拟按键输入 click():单击元素 clear()方法用于清除文本输入框 ...

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

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

  5. Selenium 定位一组元素

    到目前为止,我们已经知道了怎么去定位一个元素,有时候我们需要获取页面上的多个元素,该怎么办呢?难道还一个一个地去定位,那也太lower了吧. webdriver提供了定位一组元素的方法,跟前面讲的那八 ...

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

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

  7. Selenium 2自动化测试实战

    Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...

  8. 2.8 定位一组元素elements

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

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

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

随机推荐

  1. 二,kubernetes集群的安装初始化

    目录 部署 集群架构示意图 部署环境 kubernetes集群部署步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 设置docker和kubelet为自启动(nod ...

  2. cyopen注释掉导入的动态函数

    cyopen注释掉导入的动态函数 cyopen注释掉导入的动态函数 cyopen注释掉导入的动态函数

  3. js 动态获取高度 设置距离

    var boxs = document.getElementById('m2-head');var Height = boxs.clientHeight||o.offsetHeight;console ...

  4. Java 工厂方法模式的简单示例

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象. 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究 ...

  5. JAVA笔记9-多态(动态绑定、池绑定)

    1.动态绑定:执行期间(而非编译期间)判断所引用对象的实际类型,根据实际的类型调用相应方法. 2.多态存在的三个必要条件(同时):继承.重写.父类引用指向子类对象. 这三个条件满足后,当调用父类中被重 ...

  6. PHP入门(五)

    一.超级全局变量 超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们 ...

  7. eval与exec的区别,以及变量的作用范围

    # eval与exec的区别:eval 有返回值,而 exec没有返回值 # 这两个函数都是执行python语句,注意:里面传的是字符串的格式 a = eval('1+2') a # 这里a有值 3 ...

  8. @ApiParam和@RequestHeader接收参数的区别

    一.代码 @ApiOperation(value = "查询学生信息") @GetMapping(value = "/select/student") @Api ...

  9. Python天天学_01_基础1

    Python_day_01 金角大王:http://www.cnblogs.com/alex3714/articles/5465198.html ------Python是一个优雅的大姐姐 学习方式: ...

  10. SpringBoot 单文件和多文件上传

    单.多文件上传:单文件上传使用upload.html ,多文件上传使用uploads.html 创建一个Springboot application, POM 中加入 spring-boot-star ...