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之元素定位的更多相关文章

  1. Selenium webdriver 学习总结-元素定位

    Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...

  2. Python3.x:Selenium中的webdriver进行页面元素定位

    Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...

  3. Selenium:WebDriver简介及元素定位

    参考内容:官方API文档,下载链接:http://download.csdn.net/detail/kwgkwg001/4004500 虫师:<selenium2自动化测试实战-基于python ...

  4. 转:python webdriver API 之层级定位

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

  5. java selenium webdriver实战 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

  6. Webdriver常用的元素定位

    Webdriver常用定位元素的方法有以下八种: id.name.class name.tag name.link text.partial link text.xpath.class selecto ...

  7. Selenium2(WebDriver)总结(三)---元素定位方法

    元素定位的重要性不言而喻,如果定位不到元素谈何操作元素呢,webdrvier提供了很多种元素定位方法,如ID,Name,xpath,css,tagname等. 例如需要定位如下元素: <inpu ...

  8. 【转载】【selenium+Python WebDriver】之元素定位

    总结: 感谢: “煜妃”<Selenuim+Python之元素定位总结及实例说明> “Huilaojia123”<selenium WebDriver定位元素学习总结> “上海 ...

  9. 【转】【selenium+Python WebDriver】之元素定位不到解决办法

    感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...

随机推荐

  1. Keepalived + HAProxy 搭建【第二篇】Keepalived 安装与配置

    第一步:准备 1. 简介 本文搭建的是利用 Keepalived 实现 HAProxy 的热备方案,即两台主机上的 HAProxy 实例同时运行,其中全总较高的实例为 MASTER,MASTER出现异 ...

  2. Asp.Net MVC学习总结(三)——过滤器你怎么看?

    一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的逻辑.提供了一个简单而优雅的方式来实现横切关注点. 2.所谓的过滤器(Filters),MVC框架里 ...

  3. JAVA开发环境搭建 - Eclipse基本配置

    Eclipse设置的内容包括许多方面,不同的开发人员,不同的项目需要,可能对Eclipse的设置不尽相同.如下内容仅是对本人的一些基本设置做一些记录,以作备忘.后期会逐渐对相关内容进行更新,仅供参考. ...

  4. cocos2dx 中文路径编译错误记录

    '/Q' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1> 'y' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1>C:\Program Files ...

  5. 每天一个Linux命令 3

    Linux grep命令详解: grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一 ...

  6. 求int型正整数在内存中存储时1的个数

    题目描述: 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入例子: 5 输出例子: ...

  7. nodejs学习一

    总觉得一个前端,不懂得一点后端的服务,弱弱的没有存在感,所以利用现在好好 学学有关nodejs 首先是windows上进行nodejs的全局安装 32 位安装包下载地址 : https://nodej ...

  8. loadrunner:Auto Correlate自动定位瓶颈

    Auto correlate可以根据数据趋势,自动分析出可能影响目标性能的数据项,通过它可以很方便地找出哪些数据之间有明显的相互依赖性. 下面以分析影响平均响应时间的windows资源为例,讲解Aut ...

  9. synchronized的4种用法

    1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程 ...

  10. LINQ笔记

    LINQ概述 语言集成查询(Language intergrated Query,LINQ)在C#编程语言中集成了查询语法. 可以使用相同的语法访问不同的数据源 提供了不同数据源的抽象层,所有可以使用 ...