在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种)。

   分别介绍如下:

1.name定位

(注意:必须确保name属性值在当前html页面中是唯一的)

    页面源码如下:

        "<button name="btnK">Google Search</button>"

    当我们要用name属性来定位这个按钮元素并点击它时,代码如下:

        driver.find_element_by_name('btnK').click()

2.id定位

(注意:必须确保id属性值在当前html页面中是唯一的)

    页面源码如下:

        "<button id="gbqfba">Google Search</button>"

    当我们要用id属性来定位这个按钮元素并点击它时,代码如下:

        driver.find_element_by_id('gbqfba').click()

3.tagNamed定位

(注意:必须确保标签在当前html页面中是唯一的,标签名在html页面中一般不唯一,所以定位单个元素时很少用,定位一组元素时用)

    页面源码如下:

        "<button>Google Search</button>"

    当我们要用tagName属性来定位这个按钮元素并点击它时,代码如下:

        driver.find_element_by_tag_name('button').click()

4.className定位

    (注意:必须确保className属性值在当前html页面中是唯一的)

    一:class属性值只有一个

        页面源码如下:

            "<button class="gbqfba">Google Search</button>"

        当我们要用className属性来定位这个按钮元素并点击它时,代码如下:

            driver.find_element_by_class_name('gbqfba').click()

    二:class属性值存在多个

    注意:使用className来进行元素定位时,有时会碰到一个元素指定了若干个class属性值的“复合样式”的情况

    页面源码如下:

        <button class ="btn btn_big btn_submit">登录</button>

    这个元素的class有三个不同的值,我们只需要选择其中一个值就好了,代码如下:

        driver.find_element_by_class_name('btn_submit').click()

5.linkText定位

    页面源码如下:

        <a href="/intl/en/about.html">我的名字叫做Kevin</a>

    当我们要用linkText属性来定位这个按钮元素并点击它时,代码如下:

        driver.find_element_by_link_text('我的名字叫做Kevin').click()

6.partialLinkText定位

(注意:这个方法是上一个方法的扩展。当你不能准确知道超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使用这个方法来通过部分链接文字进行匹配。)

    页面源码如下:

        <a href="/intl/en/about.html">我的名字叫做Kevin</a>

    当我们要用linkText属性来定位这个按钮元素并点击它时,代码如下:

        driver.find_element_by_partial_link_text('Kevin').click()

7.xpath定位

(这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元素。)

查找页面根元素: //

查找页面上所有的input标签的元素: //input

    代码:driver.find_elements_by_xpath('//input[1]')  #注意:加个s代表定位多个元素

查找页面上第一个input标签的元素: //input[1]

    代码:driver.find_element_by_xpath('//input[1]')

查找页面上标签为form且id为loginForm元素: //form[@id="loginForm"]

    代码:driver.find_element_by_xpath('//form[@id="loginForm"]')

查找页面上具有name属性为username的input标签的元素: //input[@name="username"]

    代码:driver.find_element_by_xpath('//input[@name="username"]')

查找页面上id为loginForm的form元素下的第一个input元素: //form[@id="loginForm"]/input[1]

    代码:driver.find_element_by_xpath('//form[@id="loginForm"]/input[1]')

查找页面具有name属性为contiune并且type属性为button的input元素: //input[@name="continue" and @type="button"]

    代码:driver.find_element_by_xpath('///input[@name="continue" and @type="button"]')

查找页面上id为loginForm的form元素下第4个input元素: //form[@id="loginForm"]/input[4]

    代码:driver.find_element_by_xpath('//form[@id="loginForm"]/input[4]')

前面讲的都是xpath中基于准确元素属性的定位,其实xpath作为定位神器也可以用于模糊匹配。

    1.用contains关键字,定位代码如下:

    driver.find_element_by_xpath("//a[contains(@href,‘logout’)]")

    2.用start-with关键字,定位代码如下:

    driver.find_element_by_xpath("//a[starts-with(@rel,"nofo")]");

    3.用Text关键字,定位代码如下:

    driver.find_element_by_xpath('//*[text()="退出"]');  4.用ends-with关键字,定位代码如下

 driver.find_element_by_xpath("//a[ends-with(@rel,"nofo")]");

8.css定位

css定位元素方式跟xpath比较类似,但执行速度较快,而且各种浏览器对它的支持都相当到位,所以功能也是蛮强大的。

下面是一些常见的cssSelector的定位方式:

定位id为flrs的div元素可以写成:#flrs     注:相当于xpath语法的//div[@id=’flrs’]

定位id为flrs下的a元素,可以写成 #flrs>a  注:相当于xpath语法的//div[@id=’flrs’]/a

定位id为flrs下的href属性值为 /forexample/about.html的元素,可以写成: # flrs > a[href=”/forexample/about.html”]

如果需要指定多个属性值时,可以逐一加在后面,如  #flrs>input[name=”username”][type=”text”]

最后再总结一下,各种方式在选择的时候应该怎么选择:

1.当页面元素有id属性时,尽量用id来定位。

2.xpath是屠龙刀,css是倚天剑,双剑合璧,才可以天下无敌,所以最好把这两种定位方式都掌握。

3.很多人说xpath定位比css慢,但个人感觉速度上没什么区别,可能是0.01和0.1的区别吧。

selenium自动化之元素定位方法的更多相关文章

  1. Selenium之WebDriver元素定位方法

    Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质. webdriver 提供了八种元素定位方法,python语言中也有对应的方 ...

  2. 关于UI自动化IOS元素定位方法说明

    1. 元素属性介绍 下图是通过weditor定位的微博的"我的钱包",各属性如下图: className:元素类型,如:XCUIElementTypeButton isEnable ...

  3. Selenium 八种元素定位方法

    前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...

  4. Selenium八种元素定位方法源码阅读

    接触过Selenium的都知道元素定位有八种方法,但用不同的方法在执行时有什么区别呢? 元素定位8种方法(Python版),当然还有每一个方法对应的find_elements方法 find_eleme ...

  5. Selenium自动化-CSS元素定位

    接下来,开始讲解 CSS元素定位. CSS定位速度快,功能多,但是不能向上查找,比 xpath好用,是本人认为最好用的定位方式   大致用法总结: 具体使用仿上篇博客.http://www.cnblo ...

  6. selenium常见的元素定位方法

    一.获取元素 1)通过谷歌浏览器自动的工具访问百度首页,我们可以看到,页面上的元素都是由一行行的代码组成的,它们之间有层级地组织起来,每个元素之间都有不同的标签和值,我们可以通过这些不同的标签和值来找 ...

  7. Selenium自动化测试之元素定位

    步骤: 1.通过前端工具,查看元素的属性 2.通过属性定位 iddriver.findElement(By.id("kw")) namedriver.findElement(By. ...

  8. selenium+python自动化之元素定位

    自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. ...

  9. Selenium Web元素定位方法

    Selenium是用于Web应用测试的自动化测试框架,可以实现跨浏览器和跨平台的Web自动化测试.Selenium通过使用WebDriver API来控制web浏览器,每个浏览器都都有一个特定的Web ...

随机推荐

  1. linux内核中网络文件系统的注册初始化

    针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...

  2. Luogu[P1108] 低价购买

    \(Link\) \(\mathcal{\color{red}{Description}}\) 请你求出一个数列的最长下降子序列长度,并为此求出其方案数. \[1 \leq N \leq 5000\] ...

  3. 学习Java的知识体系路线(详细完整版,附图加目录)

    将网上的Java学习路线图进行归纳囊括,方便以后学习时弥补自身所欠缺的知识点,也算是给自己一个明确的学习方向.至于第一阶段,即JavaSE的基础,这里不给出. 第二阶段 技术名称 技术内容 数据库技术 ...

  4. Vue聊天框默认滚动到底部

    功能场景 在开发中,我们总能遇到某些场景需要运用到聊天框,比如客服对话.如果你不是一名开发人员,可能你在使用QQ或者聊天工具的时候并没有注意到,当你发出一条消息的时候,窗体会默认滚动到最底部,让用户可 ...

  5. IO流C++

    1.iostream处理控制台IO #include<iostream> #include<string> using namespace std; istream& ...

  6. jQuery笔记: 基本概念与jQuery核心

    目录 初识jQuery 为什么要使用jQuery? 如何使用jQuery? jQuery与js加载模式不同 jQuery入口函数的四种写法 jQuery的访问符冲突问题 jQuery核心函数和jQue ...

  7. JQuery 同时获取多个标签的指定内容并储存为数组

    在网页开发中经常会碰到获取同种类型的 标签 的值得问题,比如下面的两种情况. 当需要批量获取同种标签的指定值时,新人就会碰上一点小麻烦. 比如 id=problem1的demo var list1=$ ...

  8. java日常规范

    1.方法返回类型用int还是Integer 看需求,int是数据类型,不能包含null等. Integer是类,其中包含该类中属性和方法,包含null. 所以建议使用Integer,方便以后拓展. 2 ...

  9. Redis全方位讲解--哨兵模式(Sentinel模式)

    前言 当按照上一篇<redis主从复制>部署好之后,我们会想,一旦redis的master出现了宕机,并且我们并没有及时发现,这时候就可能会出现数据丢失或程序无法运行.此时,redis的哨 ...

  10. 树莓派安装OSMC打造家庭影院,还可以看优酷和CCTV

    1.OSMC是什么? OSMC是树莓派官方推荐的影音系统,是一款开源的操作系统,是Openelec的升级版,同样是基于Kodi的开源项目.OSMC,使用它可以将树莓派打造成一款全功能的家庭影院系统,它 ...