webdriver(python)学习笔记四——定位一组元素
webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法。
定位一组对象一般用于以下场景:
- 批量操作对象,比如将页面上所有的checkbox都勾上
- 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个
checkbox.html
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html;charset=utf-8" />
- <title>Checkbox</title>
- <script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
- <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/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="c1">checkbox1</label>
- <div class="controls">
- <input type="checkbox" id="c1" />
- </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>
- <div class="control-group">
- <label class="control-label" for="r">radio</label>
- <div class="controls">
- <input type="radio" id="r" />
- </div>
- </div>
- </form>
- </div>
- </body>
- </html>
此脚本需要与自动化脚本同一目录下。
将html打开显示如下图所示:
可看出共打开三个复选框,一个单选框。
方法一:定位三个复选框
- # coding:utf-8
- from selenium import webdriver
- import time
- import os
- dr=webdriver.Firefox()
- file_path='file:///'+os.path.abspath('checkbox.html')
- dr.get(file_path)
- #选择页面上的所有的input,然后从中选出所有的checkbox并勾选上
- inputs=dr.find_elements_by_tag_name('input')
- for input in inputs:
- if input.get_attribute('type')=='checkbox':
- input.click()
- time.sleep(1)
- dr.quit()
这里input的attribute类型有checkbox,也有radio,也可以将其设为radio,则可将其选中。
第二种方法:
- # coding:utf-8
- from selenium import webdriver
- from time import sleep
- import os
- dr=webdriver.Firefox()
- file_path='file:///'+os.path.abspath('checkbox.html')
- dr.get(file_path)
- #选择页面上的所有的checkbox并选中
- checkboxes=dr.find_elements_by_css_selector('input[type=checkbox]')
- for checkbox in checkboxes:
- checkbox.click()
- sleep(1)
- #打印当前页面上共有多少个checkbox
- print len(dr.find_elements_by_css_selector('input[type=checkbox]'))
- sleep(1)
- dr.quit()
两种方式都是通过循环来选中元素,两种方法定位时不同,一个是name,一个是css方式。
上面两种方法都是将同一类型的复选框全部选中的方法,那如何只取其中的几个呢。实现方式可以是先全部选中,再去掉某个。
如何去掉勾选:
把最后一个选中复选框去掉方法。
- # coding:utf-8
- from selenium import webdriver
- from time import sleep
- import os
- dr=webdriver.Firefox()
- file_path='file:///'+os.path.abspath('checkbox.html')
- dr.get(file_path)
- #选择页面上的所有的checkbox并选中
- checkboxes=dr.find_elements_by_css_selector('input[type=checkbox]')
- for checkbox in checkboxes:
- checkbox.click()
- #打印当前页面上共有多少个checkbox
- print len(dr.find_elements_by_css_selector('input[type=checkbox]'))
- #将页面上最后1个checkbox的勾选运去掉
- dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
- sleep(2)
- dr.quit()
去掉勾选的逻辑就是先选中,然后再次点击取消选中。在此使用的方法的pop()方法即删除最后一个元素。
webdriver(python)学习笔记四——定位一组元素的更多相关文章
- webdriver(python)学习笔记六——操作测试对象
定位到具体对象后,就需要对其进行操作,比如点击.输入内容等. 一般来说,webdriver中比较常用的操作对象的方法有下面几个 click 点击对象 send_keys 在对象上模拟按键输入 clea ...
- webdriver(python)学习笔记七——多层框架定位与智能等待
多层框架或窗口定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 现在web应用中经常会遇到框架如(frame)或窗口(w ...
- webdriver(python)学习笔记五——层级定位
层级定位 在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个.由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位.先定位父元素, ...
- webdriver(python) 学习笔记三
知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...
- python 学习笔记(四) 统计序列中元素出现的频度(即次数)
案例一:在某随机序例中,找到出现频度最高的3个元素,它们出现的次数是多少? from random import randint # 利用列表解析器生成随机序列,包含有30个元素 data = [ra ...
- Python学习笔记四--字典与集合
字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...
- Python学习笔记四
一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...
- python学习笔记(四)、条件、循环及其他语句
1 再谈print和import 1.1 打印多个参数 print 能够同时打印多个表达式,并且能自定义分隔符.如下: print('a','b','c') ——> a b c print('a ...
- python学习笔记(2)--基本语法元素
来看一个非常简单的温度转换程序 #Tempconvert.py tempstr = input("输入:") if tempstr[-1] in ['F', 'f']: C = ( ...
随机推荐
- POJ 1125 Stockbroker Grapevine(floyd)
http://poj.org/problem?id=1125 题意 : 就是说想要在股票经纪人中传播谣言,先告诉一个人,然后让他传播给其他所有的经纪人,需要输出的是从谁开始传播需要的时间最短,输出这个 ...
- Python图片转换成矩阵,矩阵数据转换成图片
# coding=gbk from PIL import Image import numpy as np # import scipy def loadImage(): # 读取图片 im = Im ...
- 解决Eclipse10配置Pydev不成功的问题
本人在线配置还在本地配置后 重启Eclipse,Windows-Preferences中并无Python选项,新建项目也无Python可选 这个尝试了好多种方法,重新安装Eclipse10,重新安装j ...
- AutoEventWireup解释
这一事件聚合了当前页是否自动关联某些特殊事件. 首先,从浏览器页面出发的事件不能立刻在本地得到处理,而是POST至服务器上,因此,asp.net建立了委托(代理)机制.在建立一个事件的同事,建立相应的 ...
- Java学习笔记之:Java引用数据类型之字符串
一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...
- 244. Shortest Word Distance II
题目: This is a follow up of Shortest Word Distance. The only difference is now you are given the list ...
- 5、处理模型数据ModelAndView、Map、Model以及@SessionAttributes注解
Spring MVC提供了以下几种途径输出模型数据 —— ModelAndView: 处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据.数据会添加到request域中. ...
- 实例学习Bloom Filter
0. 科普1. 为什么需要Bloom Filter2. 基本原理3. 如何设计Bloom Filter4. 实例操作5. 扩展 0. 科普 Bloom Filter是由Bloom在1970年提出的一种 ...
- VCC_VID_VTT等的含义
VCC--为直流电压.在主板上为主供电电压或一般供电电压.例如 一般电路VCC3--+3V供电.主板上VCC3: 3.3V VCC25: 2.5V VCC333: 3.3V VCC5: 5V VCC1 ...
- MyEclipse中使用JUnit进行单元测试
1. 下载JUnit的jar文件,下载地址在这里 2. 在MyEclipse中新建一个要测试的项目HelloJUnit 3. 添加一个要测试的类HelloJUnit,代码如下,注意需要先建packag ...