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. 根据WaitType诊断故障

    在查询执行时,等待次数和等待时间在一定程度上指示查询的瓶颈,甚至非常有助于对系统进行诊断.偶尔一次的异常等待,不足以表明系统存在瓶颈,但是,SQL Server实例经常出现特定的等待类型,并且等待时间 ...

  2. PHP+Jquery+Ajax 实现动态生成GUID、加载GUID

    GUID: 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中 ...

  3. React组件开发经典案例--todolist

    点开查看代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...

  4. 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复

    3390: [Usaco2004 Dec]Bad Cowtractors牛的报复 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 69  Solved:  ...

  5. Java数据结构之Set学习总结

    前言: 前面介绍了Java的数据结构List.Map,今天抽空学习总结一下另一种数据结构Set. Set介绍 Set相对于List.Map是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重 ...

  6. IO 模型

    常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求soc ...

  7. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  8. 关于web测试收集

    页面部分 页面清单是否完整(是否已经将所需要的页面全部都列出来了) 页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是是否显示) 页面在窗口中的显示是否正确.美观(在调整浏览器窗口大小 ...

  9. JavaScript当页面关闭时向后台发送请求

    今天做项目时遇上一个需求,当浏览器或页面关闭时将数据存储到数据库内.实现思想是采用js监测onunload然后发送请求.结果失败,刷新可以发送但是关闭并不能,整了一整天并没有解决,最后找到了解决办法. ...

  10. pycharm社区版无database 解决方法

    第一步,点击file/setting/plugins 如下图所示 第二步,搜索database 安装database Nivagator 并Apply 第三步,新建数据库连接,open sql con ...