Webdriver API之元素定位
Webdriver提供了8种元素定位方法:id、name、class name、tag name、link text、partial link text、xpath、css selector
一、以上8种元素定位,Webdriver提供两套写法
1. 用By定位元素:通过By来声明定位的方法,需引入By模块
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
2. 直接定位
find_element_by_id("kw")
find_element_by_name("wd")
二、定位一组元素
定位一组元素一般用于以下场景:
批量操作元素,例如勾选所有的复选框
先获取一组元素,元素对象以列表形式返回,再从这组对象中过滤出需要操作的元素。例如定位出页面所有的checkbox,然后选择其中的一个进行操作
find_elements_by_id("kw")
find_elements_by_name("wd")

#coding=utf-8
from selenium import webdriver
import os driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('checkbox.html')
driver.get(file_path) # 选择页面上所有的tag name为input的元素
inputs = driver.find_elements_by_tag_name('input') #然后从中过滤出tpye为checkbox的元素,单击勾选
for i in inputs:
if i.get_attribute('type') == 'checkbox':
i.click() driver.quit()
如何勾选一组元素中的某一个选项呢?
# 打印当前页面上type为checkbox的个数
print len(checkboxes) # 把页面上最后1个checkbox的勾给去掉
driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()
# pop()或pop(-1) 默认获取一组元素中的最后一个
#pop(0) 默认获取一组元素中的第一个
#pop(1) 默认获取一组元素中的第二个
#。。。。
三、8种元素定位
1. id定位
HTML规定id属性在HTML文档必须是唯一的。
find_element_by_id("kw")
2. name定位
name的属性值在HTML页面种可以不是唯一的。
find_element_by_name("wd")
3. class定位
通过class属性值来定位元素:
find_element_by_class_name("bg s_btn")
4. tag定位
通过<div>、<input>、<a>等tag来定位元素:
find_element_by_tag_name("input")
5. link定位
专门用来定位文本链接,通过链接文本的内容来定位元素:
find_element_by_link_text("百度新闻")
6. partial link定位
对link定位的一种补充,有些文本链接比较长,这个时候取文本的部分信息来定位元素(条件是能唯一标识这个链接)
find_element_by_partial_link_text("[百]度新[闻]")
7. xpath定位
xpath是一种在XML文档种定位元素的语言,因为HTML页可看作XML的一种实现。xpath定位方法实现基本可以到99%
策略:
(1)绝对路径定位(不建议,因对页面的应变性太差)
(2)利用元素属性定位(元素的任意属性都可以,只要是唯一)
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//*[@maxlength='100']")
(3)属性与层级结合
find_element_by_xpath("//span[@class='bg s_ipt_wr']/input[2]")
(4)使用逻辑运算符
find_element_by_xpath("//input[@id='kw' and @class='su']")
8. CSS定位
CSS是一种语言,它用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。一般情况下定位速度要比xpath快,且定位成功率99%
验证方法:使用网站自带的Jquery库可以定位css选择器,$就是jQuery的别称,是jQuery库提供的一个函数。
1、可以通过$ () 里的参数进行查找和选择html文档中的元素
如:
|
|
$('#tmp');//这是查找dom的id等于tmp的元素 |
方法:在浏览器的console里输入:$('') 例:输入$('.bg s_btn')便可验证元素是否被定位到
定位策略:
(1)通过class属性定位:
find_element_by_css_selector(".bg s_btn")
(2)通过id属性定位:
find_element_by_css_selector("#kw")
(3)通过任意属性定位:
find_element_by_css_selector("[autocomplete='off']")
(4)组合定位:
find_element_by_css_selector("span.bg s_btn>input#su")



Webdriver API之元素定位的更多相关文章
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- Python3.x:Selenium中的webdriver进行页面元素定位
Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...
- Selenium:WebDriver简介及元素定位
参考内容:官方API文档,下载链接:http://download.csdn.net/detail/kwgkwg001/4004500 虫师:<selenium2自动化测试实战-基于python ...
- 转:python webdriver API 之层级定位
在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素 ,现在需要具体定位到其中的一个.由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位.先定位父元素,然后再通 ...
- java selenium webdriver实战 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- Webdriver常用的元素定位
Webdriver常用定位元素的方法有以下八种: id.name.class name.tag name.link text.partial link text.xpath.class selecto ...
- Selenium2(WebDriver)总结(三)---元素定位方法
元素定位的重要性不言而喻,如果定位不到元素谈何操作元素呢,webdrvier提供了很多种元素定位方法,如ID,Name,xpath,css,tagname等. 例如需要定位如下元素: <inpu ...
- 【转载】【selenium+Python WebDriver】之元素定位
总结: 感谢: “煜妃”<Selenuim+Python之元素定位总结及实例说明> “Huilaojia123”<selenium WebDriver定位元素学习总结> “上海 ...
- 【转】【selenium+Python WebDriver】之元素定位不到解决办法
感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...
随机推荐
- 徒手用Java来写个Web服务器和框架吧<第三章:Service的实现和注册>
徒手用Java来写个Web服务器和框架吧<第一章:NIO篇> 徒手用Java来写个Web服务器和框架吧<第二章:Request和Response> 这一章先把Web框架的功能说 ...
- 3步轻松搭建Unity3d安卓开发环境
之前写过一个Untiy3d安卓开发环境的配置教程,那是我第一次学习配置安卓开发环境,互联网上的信息良莠不齐,自己当时也不懂,配置步骤麻烦的一塌糊涂,现在见的多了,也会的多了,配置安卓开发环境变得非常容 ...
- Vue基本入门
介绍 1.Vue.js是什么? Vue.js(读音:/vju:/,类似于view)是一套构建用户界面的渐进式框架,与其他重量级框架不同的是,Vue采用的是自底向上增量开发的设计. Vue的核心库只关注 ...
- python 接口自动化测试--框架定型(六)
脚本执行步骤: 1.还原测试数据库: 2.读取接口用例CSV文件到数据库: 3.执行数据库中标记执行的用例: 4.对比预期结果,将测试结果写入数据库结果表中. 数据管理: 事先备份测试数据库,并搭建自 ...
- React 进修之路(2)
生命周期 React中的组件被看成是一个有生命的个体,因此赋予了声明周期的概念,就是为了定义组件所处的状态 React中组件共分三大周期,11个阶段 创建期(少年,成长)组件创建时候进入的时期 get ...
- NDK 开发实例二(添加 Eigen库)
上一篇,我已经阐述了如何创建一个简单的NDK实例: NDK 开发实例一(Android.mk环境配置下) 在上一篇的基础上,我们来添加Eigen库,然后做一个简单实例. Eigen是一个高层次的C + ...
- Python中闭包、装饰器的概念
1.闭包(Closure)的概念: 内部函数中对enclosing作用域的变量进行引用 1 passline = 60 2 def func(val): 3 print('%x' % id(val)) ...
- NDK(三方库引入、Mk文件)
NDK笔记-----第三方库引入 一.字符操作: 1 二.NDK*(JNI)对象操作: 2 1.C++调用java对象 3 三.Android.mk说明: 3 四.Application.mk说明 3 ...
- 面试 -- ListView对其指定的子Item进行单独的刷新
1,最近在面试题目的时候突然看到了问题"ListView对其指定的子Item进行单独的刷新",当时感觉一脸懵逼,还是第一次听到这个问题,也就是不能使用adapter.notifyD ...
- SQL Server跨数据库 增删查改
比如你在库A ,想查询库B的表.可以用 数据库名.架构名.表名的方式查询 select * from 数据库B.dbo.表1 也可以在存储过程中这样使用. 需要注意的是,如果使用这样的查询方式,你必须 ...