一、定位一组元素

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. Liunx 用户权限之目录

    总结一下: 今天又对liunx权限的认知多了一点,就是关于目录的权限的作用 可以打个比方来形容就是:相当于一个大门 只有目录权限都有的情况下,才能够对目录中的文件进行目录权限操作 例如:drwxrwx ...

  2. 【AGC006 C】Rabbit Exercise

    题意 有 \(n\) 只兔子在数轴上,第 \(i\) 只兔子的初始坐标为整数 \(x_i\). 现在这些兔子会按照下面的规则做体操.每一轮体操都由 \(m\) 次跳跃组成:在第 \(j\) 次跳跃时, ...

  3. Summer training round2 #7 (Training #23)

    A:约瑟夫环 套公式 B:线性筛素数 C:投骰子 概率DP F:有权无向图的生成树(边最大值和最小值只差最小) 直接kruskal G:状压BFS或者双向BFS H:模拟题 I:几何题 J:高斯消元

  4. 简单了解Oracle的回滚段

    因为上一次研究了Oracle的事务一致性,中间查阅资料的时候,看到这个地方与回滚段有关.所以就罗列了以下简单的知识.更为深层次的就不再深挖了,个人感觉对于事务的一致性和隔离级别是开发经理应该了解的,但 ...

  5. public、protected、private

    public(公有):可以在任何地方被访问 protected(受保护):可以被其自身以及其子类和父类访问,类的对象也不可以访问 private(私有):只能被其定义所在的类访问,类的对象也不可以访问 ...

  6. 快速排序c代码

    //快速排序,通过测试 #include "stdio.h" void quickSort(int* data,int len){ ) return; ; ; ]; while(s ...

  7. Robot Framework中ride.py打不开的解决方法

    1.首先查看wxPython版本是否跟python的版本一致,一般都使用wxPython2.8-win64-unicode-2.8.12.1-py27.exe或者wxPython2.8-win32-u ...

  8. TTTTTTTTTTTTTTTTTTTTT POJ 3690 0与* 二维哈希 模板 +multiset

    Constellations Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5923   Accepted: 1164 De ...

  9. POJ 3683 神父赶婚宴 2-SAT+输出模板

    题意:一个小镇里面只有一个牧师,现在有些新人要结婚,需要牧师分别去主持一个仪式,给出每对新人婚礼的开始时间 s 和结束时间 t ,还有他们俩的这个仪式需要的时间(每对新人需要的时间长短可能不同) d ...

  10. Linux命令-文件管理(三)

    Linux more命令 Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(bac ...