元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。

webdriver提供了一系列的元素定位方法,常用的有以下几种:

  • id
  • name
  • class name
  • tag
  • link text
  • partial link text
  • xpath
  • css selector

案例:打开百度首页,在搜索框自动输入“Selenium”关键词,然后点击搜索按钮,查看搜索页面

在此之前,首先使用前端工具查看百度首页的元素,可以查看到各种标签对、标签属性、标签对之间的文本数据以及层级关系等,如下所示:

<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
<a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;"></a>
</span>
<span class="bg s_btn_wr">
<input id="su" class="bg s_btn" type="submit" value="百度一下">
</span>

id定位

from selenium import webdriver
from time import sleep driver=webdriver.Firefox()
driver.get("http://www.baidu.com") driver.find_element_by_id("kw").send_keys("selenium")
sleep(2) driver.find_element_by_id("su").click()
sleep(3) driver.quit()

HTML规定id属性在HTML文档中必须是唯一的,Webdriver提供的id定位方法就是通过元素的id属性来查找元素。


name定位

driver.find_element_by_name("wd").send_keys("selenium")

HTML规定name来置顶元素的名称,name的属性值,在当前页面中可以不唯一。


calss定位

driver.find_element_by_class_name("s_ipt").send_keys("selenium")

HTML规定class来置顶元素的类名,其用法与id、name类似。


tag定位

案例:打开博客园首页页面,在找找看的搜索输入框输入关键词“selenium”,休息3秒后,在Google前面的搜索框输入“selenium”关键词

from selenium import webdriver
from time import sleep driver = webdriver.Firefox()
driver.get("https://www.cnblogs.com") #定位标签名为input的元素,默认是第一个
driver.find_element_by_tag_name("input").send_keys("Selenium")
sleep(3)
#获取页面所有标签名为“input”的标签
driver.find_elements_by_tag_name("input")[1].send_keys("Selenium")
sleep(3) driver.quit()

HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低,很难通过标签tag name去区分不同的元素


link定位

案例:打开百度首页的新闻页面

此时,使用前端工具查看到的页面代码如下:

<div id="u1">
<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
<a class="mnav" name="tj_trhao123" href="http://www.hao123.com">hao123</a>
<a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>
<a class="mnav" name="tj_trvideo" href="http://v.baidu.com">视频</a>
<a class="mnav" name="tj_trtieba" href="http://tieba.baidu.com">贴吧</a>
<a class="mnav" name="tj_trxueshu" href="http://xueshu.baidu.com">学术</a>
<a class="lb" onclick="return false;" name="tj_login" href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F">登录</a>
<a class="pf" name="tj_settingicon" href="http://www.baidu.com/gaoji/preferences.html">设置</a>
<a class="bri" style="display: block;" name="tj_briicon" href="http://www.baidu.com/more/">更多产品</a>
</div>

Python代码:

driver.find_element_by_link_text("新闻").click()

find_element_by_link_text()方法通过元素标签对之间的文本信息来定位元素


Partial link定位

driver.find_element_by_partial_link_text('党的十九大精神').click()

partial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一的标识这个链接

Webdriver元素定位1的更多相关文章

  1. Selenium之WebDriver元素定位方法

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

  2. Selenium Webdriver元素定位的八种常用方式

    楼主原创,欢迎学习和交流,码字不容易,转载请注明出处,谢谢. 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素 ...

  3. Selenium Webdriver元素定位的八种常用方法

    如果你只是想快速实现控件抓取,而不急于了解其原理,可直接看: http://blog.csdn.net/kaka1121/article/details/51878346 如果你想学习web端自动化, ...

  4. python3 selenium webdriver 元素定位xpath定位骚操作

    源文http://www.cnblogs.com/qingchunjun/p/4208159.html By.xpath() 这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元 ...

  5. Selenium Webdriver元素定位的八种常用方式(转载)

    转载自 https://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或 ...

  6. 爬虫-【selenium—Webdriver元素定位的八种常用方式

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  7. selenium webdriver——元素定位

    元素定位: >>WebDriver提供了八种元素定位方法,在Python语言中,所对应的方法如下: >>id属性定位:有唯一性 find_element_by_id(" ...

  8. Webdriver元素定位2(XPath)

    XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力. 绝对路径定位 案例:在百度首页搜索框输入selenium ...

  9. Selenium Webdriver元素定位的八种常用方式【转】

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

随机推荐

  1. 【react native】rn踩坑实践——从输入框“们”开始

    因为团队技术栈变更为react native,所以开始写起了rn的代码,虽然rn与react份数同源,但是由于有很多native有关的交互和变动,实际使用还是碰到蛮多问题的,于是便有了这个系列,本来第 ...

  2. 简单的AndroidStudio单元测试工程配置

    转载: http://www.jianshu.com/p/03118c11c199

  3. django templates模板

    Django templates模板 HTML代码可以被直接硬编码在views视图代码中,虽然这样很容易看出视图是怎么工作的,但直接将HTML硬编码到视图里却并不是一个好主意. 让我们来看一下为什么: ...

  4. [Usaco2006 Open]County Fair Events 参加节日庆祝

    Description Farmer John has returned to the County Fair so he can attend the special events (concert ...

  5. Hdu 5384 Danganronpa (AC自动机模板)

    题目链接: Hdu 5384 Danganronpa 题目描述: 给出n个目标串Ai,m个模式串Bj,问每个目标串中m个模式串出现的次数总和为多少? 解题思路: 与Hdu 2222  Keywords ...

  6. js点击修改按钮后修改

    <button id="click">改变内容</button> <div id="t">要改变的内容</div> ...

  7. InChatter系统之客户端消息处理中心

    一.模块结构 首先来看下客户端消息处理中心模块的简单结构: ChatCallback:服务器端我们定义的回调接口IChatCallback的客户端实现 ChatMsgCenter:服务端的消息处理中心 ...

  8. JavaScript——class与原型对象

    原型对象的意义 通过new 一个构造函数,我们能够获得一个实例,在new 的过程中,程序会在内存中申请一块区域,同时我们可以加参数,所以每个对象都不一样. 原型对象则是同一个构造函数 new 出来的所 ...

  9. bootparam - 介绍Linux核心的启动参数

    描叙 Linux 核心在启动的时候可以接受指定的"命令行参数"或"启动参数".在通常情况下,由于核心有可能无法识别某些硬件,或可能将某些硬件识别为不正确的配置, ...

  10. 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))

    由于我添加了一个一般处理程序,再运行就出现报错. 解决方法是: 运行dcomcnfg   点组件服务->服务->电脑->我的电脑->DCOM 配置   找到“Windows M ...