Selenium - 元素定位(1) - 八种元素定位
Selenium - 元素定位
八种元素定位
我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳。
单一属性定位 :
id,name,class name,tag name,link,partial_link多样式定位(强烈推荐):
css,xpath
说明:以下操作统一使用百度首页 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代码,可以看到有很多
div、input、a等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) - 八种元素定位的更多相关文章
- selenium自动化测试——常见的八种元素定位方法
selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...
- Selenium:八种元素定位方法
前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...
- Selenium八种元素定位方法源码阅读
接触过Selenium的都知道元素定位有八种方法,但用不同的方法在执行时有什么区别呢? 元素定位8种方法(Python版),当然还有每一个方法对应的find_elements方法 find_eleme ...
- Selenium2+python自动化-八种元素定位(Firebug和Firepath)
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中 ...
- Selenium2学习(三)-- 八种元素元素定位(Firebug和firepath)
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中是至关 ...
- Selenium Webdriver元素定位的八种常用方式
楼主原创,欢迎学习和交流,码字不容易,转载请注明出处,谢谢. 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素 ...
- Selenium Webdriver元素定位的八种常用方法
如果你只是想快速实现控件抓取,而不急于了解其原理,可直接看: http://blog.csdn.net/kaka1121/article/details/51878346 如果你想学习web端自动化, ...
- Selenium Webdriver元素定位的八种常用方式(转载)
转载自 https://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或 ...
- 爬虫-【selenium—Webdriver元素定位的八种常用方式
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...
- Selenium Webdriver元素定位的八种常用方式【转】
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...
随机推荐
- 使用Nginx实现本地目录映射
如果文件是存储在服务器的某个位置,想提供pdf.jpg.png.mp4这些文件的预览功能,可以使用Nginx做虚拟映射,防止他人知道该文件的绝对路径. 如果想预览office文件,先将office文件 ...
- 查看Doris表占用空间
近期想统计下各表占用的存储空间大小,官网文档SHOW-TABLE-STATUS给的语句很简单,但是对于列的含义写的不是很明白,我写入数据验证了一下. Doris版本:1.2 查看当前数据库下所有表的信 ...
- Markdown 利用HTML进行优雅排版
Markdown 利用HTML进行优雅排版 我在使用Markdown整理文档的时候发现,Markdown本身对文本格式的排版很单一,只有编号.字体加粗.固定标题格式等一些基础的排版,使用不够灵活,好在 ...
- Java执行带空格的语句命令,cmd无法识别带空格路径的问题
带空格的会识别不了 先说解决方法: 1:用cmd中的start: 在JAVA中可以如此使用: Runtime.getRuntime().exec("cmd /c start \"\ ...
- vue 和 react 的区别有哪些
vue 和 react 有什么区别呢?下面从这 4 个角度来说一说! (1)从编程范式的角度讲 在 vue-loader.vue-template-compiler 的支持下,vue 可以采用 SFC ...
- Java面试——Spring
一.Spring Bean 作用域 [1]singleton:该属性在 IOC容器仅创建一个 Bean实例(单例),IOC容器每次返回的是同一个 Bean实例.[2]prototype:该属性在 IO ...
- MyBatisPlus 整合 SpringBoot 遇见的问题(一)
[异常]:UnsatisfiedDependencyException: Error creating bean with name 'xxx[类]': Unsatisfied dependency ...
- python入门教程之十七进程、线程和协程
进程 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次 ...
- Github 添加贪吃蛇动画
前言 我们都知道,对于Github来说,当你选择你的账户时,可以看到自己的提交记录. 于是就有大神动脑筋了,这些commit记录都是一些豆,如果弄一条蛇来,不就可以搞个贪吃蛇了吗? 有道理有道理,本文 ...
- layUI之DataTable组件V1.0(父子表管理传值/数据表格与select&laydate结合等)
layUI之DataTable数据表格组件V1.0 目录 layUI之DataTable数据表格组件V1.0 概述 一.下载与引用 二.组件功能介绍 三.父表格渲染 1. HTML中声明空table一 ...