Selenium - 元素定位

八种元素定位

  • 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳。

    • 单一属性定位 : idnameclass nametag namelinkpartial_link

    • 多样式定位(强烈推荐):cssxpath

  • 说明:以下操作统一使用百度首页 https://www.baidu.com 进行示例,鼠标右键然后点击检查(或按f12)可以查看具体的前端代码。

id

  • 从上面定位到的搜索框属性中,有个id="kw"的属性,我们可以通过这个id定位到这个搜索框

    • find_element_by_id()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过id定位搜索框,并输入selenium
driver.find_element_by_id('kw').send_keys('selenium')

name

  • 从上面定位到的搜索框属性中,有个 name="wd" 的属性,我们可以通过这个name定位到这个搜索框;

    • find_element_by_name()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过name定位搜索框,并输入selenium
driver.find_element_by_name('wd').send_keys('selenium')

class

  • 从上面定位到的搜索框属性中,有个 class="s_ipt" 的属性,我们可以通过这个class定位到这个搜索框;

    • find_element_by_class_name()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过class定位搜索框,并输入selenium
driver.find_element_by_class_name('s_ipt').send_keys('selenium')

tag

  • 如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。

  • 每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多 divinputa 等tag,所以很难通过tag去区分不同的元素。

    • find_element_by_tag_name()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过tag定位搜索框,并输入selenium, 此处必报错
driver.find_element_by_tag_name('input').send_keys('selenium')

link

  • 此种方法是专门用来定位文本链接的,比如百度首页右上角有“新闻”,“hao123”,“地图”等链接;

  • 我们来定位“新闻”这个链接元素;

    • find_element_by_link_text()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过link定位"新闻"这个链接并点击
driver.find_element_by_link_text('新闻').click()

partial_link

  • 有时候一个超链接的文本很长很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。

  • 我们用这种方法来定位百度首页的“新闻”超链接;

    • find_element_by_partial_link_text()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过partial_link定位"新闻"这个链接并点击
driver.find_element_by_partial_link_text('新闻').click()

xpath

  • 前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们。

  • 但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id、name、class属性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。

  • 那么这个时候我们就只能通过xpath或者CSS来定位了。

    • find_element_by_xpath()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过xpath定位搜索框,并输入selenium
driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')

CSS

  • 这种方法相对xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解,这里只做下简单的介绍,详细的可以查看CSS进阶。

  • CSS定位百度搜索框。

    • find_element_by_css_selector()
from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") # 通过CSS定位搜索框,并输入selenium
driver.find_element_by_css_selector('#kw').send_keys('selenium')

定位多个元素

  • 上述的八种定位方法,均只能定位到指定元素的信息,不能定位多个元素;

  • 我们仅需在 element 后面,增加 s ,就可以定位多个元素;

from selenium import webdriver
driver = Webdriver.Chrome()
driver.get("http://www.baidu.com") driver.find_elements_by_id()
driver.find_elements_by_class_name()
driver.find_elements_by_tag_name()
driver.find_elements_by_link_text()
driver.find_elements_by_name()
driver.find_elements_by_pratial_link_text()
driver.find_elements_by_xpath()
driver.find_elements_by_css_selector()

Selenium - 元素定位(1) - 八种元素定位的更多相关文章

  1. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  2. Selenium:八种元素定位方法

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

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

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

  4. Selenium2+python自动化-八种元素定位(Firebug和Firepath)

    前言    自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中 ...

  5. Selenium2学习(三)-- 八种元素元素定位(Firebug和firepath)

    前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中是至关 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Javaweb学习笔记第十五弹--Listente概述、AJAX、Axiox、JSON

    Listener(监听器) 可以在application.session和request三个对象创建 Javaweb提供了8个监听器,其中较为典型的是ServletContextListener监听器 ...

  2. 对于jsp页面中内嵌Java代码失败的解决方法(总是报出jsp类无法编译的错误)

    准备好接收奥!解决方法来啦! 在我这几天查看了好几遍内嵌的Java代码之后,没有发现什么语法上面的错误,看来错误应该就是出现在环境上面了,或者是有什么我没有注意到的小细节.还好,终于将"罪魁 ...

  3. .NET应用系统的国际化-基于Roslyn抽取词条、更新代码

    上篇文章我们介绍了 VUE+.NET应用系统的国际化-多语言词条服务 系统国际化改造整体设计思路如下: 提供一个工具,识别前后端代码中的中文,形成多语言词条,按语言.界面.模块统一管理多有的多语言词条 ...

  4. Windows 系统下怎么获取 UDP 本机地址

    Windows 系统下怎么获取 UDP 本机地址 我们知道 UDP 获取远端地址非常简单,通常接口 recvfrom 就可以直接获取到远端的地址和端口:如果获取 UDP 的本机地址就需要点特殊处理了, ...

  5. Java面试——缓存

    一.什么是缓存 [1]缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取.由于缓存的数据比磁盘快的多,所以缓存的作用就是帮 ...

  6. FastDFS 使用流程

    一.什么是FastDFS? FastDFS 是用 C 语言编写的一款开源的分布式文件系统,对文件进行管理,主要功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡 ...

  7. BEST 定理与矩阵树定理的证明

    BEST 定理:计算有向图的欧拉回路数量 欧拉图 \(G\) 的欧拉回路个数为 \(T_s(G)\prod(out_i-1)!\),其中 \(T_s(G)\) 代表以 \(s\) 为根的内向树个数,\ ...

  8. dfs实现

    1.思路:从图中的未访问的一个顶点开始,沿着一条路一直走到底,然后这条路尽头的节点,在从另外一条路走到底,不断递归此过程,直到所有遍历完成特点:不撞南墙不回头2.具体实现:当从一个未知的顶点出发,将这 ...

  9. Java设计模式 —— 享元模式

    14 享元模式 14.1 享元模式概述 Flyweight Pattern: 运用共享技术有效地支持大量细粒度对象的复用. 当系统中存在大量相同或相似的对象时,它通过共享技术实现相同或相似的细粒度对象 ...

  10. python过滤列表元素

    li = [1, 2, 3, 4, 5, 6] def fun(item, num): if item == num: return 1 else: return 0 def fun1(item, n ...