Selenium3 + Python3自动化测试系列二——selenium元素定位
一、selenium元素定位
Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素
才能进行后续的自动化控制,我在这里将对selenium8种元素基本定位方式进行总结归纳一下。
Selenium提供了8种定位方式。
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
这8种定位方式在Python selenium中所对应的方法为:
- find_element_by_id()
- find_element_by_name()
- find_element_by_class_name()
- find_element_by_tag_name()
- find_element_by_link_text()
- find_element_by_partial_link_text()
- find_element_by_xpath()
- find_element_by_css_selector()
二、定位方法的用法
以百度首页https://www.baidu.com/,部分前端页面代码为例。源码如下:
<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn"></span>
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;"></a>
</span> <span class="bg s_btn_wr">
<input type="submit" id="su" value="百度一下" class="bg s_btn">
</span>
通过id定位,find_element_by_id()
from selenium.webdriver import Chrome
import time
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get('https://www.baidu.com')
#利用find_element_by_id定位元素位置并模拟按键输入“博客园”,点击百度一下按钮搜索
driver.find_element_by_id("kw").send_keys("博客园")
driver.find_element_by_id("su").click()
time.sleep(5)
driver.quit()
通过name定位,find_element_by_name()
driver.find_element_by_name("wd")
通过class name定位,find_element_by_class_name()
driver.find_element_by_class_name("s_btn")
上面的模拟按键输入“博客园”,点击百度一下按钮搜索,我们换个方式用name和class_name来实现同样的功能。
如下所示:
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
#利用find_element_by_id定位元素位置并模拟按键输入“博客园”,点击百度一下按钮搜索
driver.find_element_by_name("wd").send_keys("博客园")
driver.find_element_by_class_name("s_btn").click()
time.sleep(5)
driver.quit()
通过tag name定位,find_element_by_tag_name()
find_element_by_tag_name("input")
通过标签名去定位的方式一般是这样的:find_element_by_tag_name("input")
可见仅仅通过标签名去定位时,一般一种标签在一个页面里面会出现不止一次甚至大量出现,
这种定位方式的作用不是很大,所以用的也就比较少。
通过xpath定位,find_element_by_xpath()
xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找。
HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。
xpath定位有N种写法,这里列几个常用写法:
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
driver.find_element_by_xpath("//span[@class='soutu-btn']/input")
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']")
from selenium.webdriver import Chrome
import time
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get('https://www.baidu.com')
#利用多种方法find_element_by_xpath()定位元素位置并模拟按键输入“博客园”,点击百度一下按钮搜索
driver.find_element_by_xpath("//*[@id='kw']").send_keys("博客园")
driver.find_element_by_xpath("//*[@name='wd']").send_keys("博客园")
driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("博客园")
driver.find_element_by_xpath("//span[@class='soutu-btn']/input").send_keys("博客园")
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']").send_keys("博客园")
driver.find_element_by_id("su").click()
time.sleep(5)
driver.quit()
通过css定位,find_element_by_css_selector()
CSS属性定位可以比较灵活地选择控件的任意属性,定位方式也会比xpath快。
driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector("[name=wd]")
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("span.soutu-btn> input#kw")
值得注意的是,在css里面下级标签元素用>连接,如果class里面有空格,空格用.进行连接。
from selenium.webdriver import Chrome
import time
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get('https://www.baidu.com')
#利用find_element_by_css_selector()定位元素位置并模拟按键输入“博客园”,点击百度一下按钮搜索
driver.find_element_by_css_selector("#kw").send_keys("博客园")
driver.find_element_by_css_selector("[name=wd]").send_keys("博客园")
driver.find_element_by_css_selector(".s_ipt").send_keys("博客园")
driver.find_element_by_css_selector("span.soutu-btn> input#kw").send_keys("博客园")
driver.find_element_by_css_selector("#su").click()
time.sleep(5)
driver.quit()
通过link text定位,find_element_by_link_text()find_element_by_partial_link_text()
这两种定位方式是专门用于定位超链接的,也就是对应html页面中的<a>标签,
括号里传的值就是a标签中的超链接文字,
两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。
前端实例源码如下:
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
<a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
比如点击百度首页中右上角的新闻和hao123超链接,可以这样去定位:
driver.find_element_by_link_text("新闻").click()
driver.find_element_by_link_text("hao123").click()
driver.find_element_by_partial_link_text("新").click()
driver.find_element_by_partial_link_text("hao").click()
driver.find_element_by_partial_link_text("").click()
关于xpaht和css的定位比较复杂,请参考W3School具体学习:
三、定位一组元素
WebDriver还提供了8种用于定位一组元素的方法。
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。
我们来举个栗子演示一下如何使用:
from selenium.webdriver import Chrome
from time import sleep driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("https://www.baidu.com") #定位所有的a标签并打印,循环遍历出每一条搜索结果的标题
texts = driver.find_elements_by_xpath('//div/a')
for t in texts:
print(t.text) sleep(5)
driver.quit()
Selenium3 + Python3自动化测试系列二——selenium元素定位的更多相关文章
- selenium3+python3自动化测试学习之网页元素定位
selenium基础实战之定位网页元素技巧 selenium定位网页元素 find_element_by_id,find_element_by_name,find_element_by_class_n ...
- 自动化测试基础篇--Selenium元素定位
摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...
- Selenium3 + Python3自动化测试系列六——等待方式
等待 一.等待是什么,为什么要等待 在做自动化测试,设计测试用例的时候,有时下一步的操作会依赖上一步的结果或者内容,上一步操作成功之后才能进行下一步操作等, 这时候,我们就需要使用等待,来判断上一步操 ...
- Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动
一.安装Python https://www.python.org/downloads/ 验证Python是否安装成功.打开Windows命令提示符(cmd),输入python,回车 注意:在安装的过 ...
- Selenium3 + Python3自动化测试系列十二——窗口截图与关闭浏览器
窗口截图 自动化用例是由程序去执行的,因此有时候打印的错误信息并不十分明确.如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因.WebDriver提供了截图函数g ...
- Selenium3 + Python3自动化测试系列五——常用断言Assertion
断言Assertion 验证应用程序的状态是否同所期望的一致. 常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选. selenium 提供了三种模式的断言:a ...
- Selenium3 + Python3自动化测试系列八——警告框处理和下拉框选择
警告框处理 在WebDriver中处理JavaScript所生成的alert.confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confi ...
- Robot Framework自动化测试(二)---元素定位
说明: 不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了seleni ...
- Selenium3 + Python3自动化测试系列四——鼠标事件和键盘事件
一.鼠标事件 在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供. ActionChains 类提供了鼠标操作的常用方法. ActionChains 类的成 ...
随机推荐
- mysql 架构 ~ binlog_server
一 简介 mysql binlog server 二 目的 实时备份线上的binlog 利用备份+binlog进行任何时间点的恢复 三 详细信息 1 基本命令 /usr/local/mysql ...
- Java的三种代理模式:静态代理/JDK动态代理/Cglib动态代理
1.静态代理:需要定义接口或者父类,目标对象与代理对象均实现同一接口或继承同一父类. 2.JDK动态代理:需要目标对象实现一个接口,通过动态反射的机制,生成代理对象,实现同一个接口 3.Cglib动态 ...
- nvm安装与使用
1.nvm是什么 nvm全名node.js version management,顾名思义是一个nodejs的版本管理工具.通过它可以安装和切换不同版本的nodejs.下面列出下载.安装及使用方法. ...
- FarBox--另类有趣的网站服务【转】
FarBox--另类有趣的网站服务 转自:http://mosir.org/html/y2012/the-interesting-web-service-serve-by-FarBox.html 作者 ...
- java中不同类型的数值占用字节数
在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型.(一个字节等于8个bit) 1.整型 类型 ...
- [BZOJ3295] [Cqoi2011]动态逆序对(带修改主席树)
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...
- python 语言特性
动态强类型: 动态类型语言:在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量的数据类型,比如Python和Ruby 静态类型语言:它的数据类型是在编译期进行检查的,也就是说变量在使用前 ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...
- saltstack自动化运维系列②之saltstack的数据系统
saltstack自动化运维系列②之saltstack的数据系统 grains:搜集minion启动时的系统信息,只有在minion启动时才会搜集,grains更适合做一些静态的属性值的采集,例如设备 ...
- rt3070无线网卡移植到开发板
Rt3070无线网卡AP功能移植到GEC210一.平台开发板:GEC210 无线网卡:RT3070主机:VMWare--Ubuntu 10.04 LTS内核版本:linux-2.6.35.7编译器:a ...