Selenium Web元素定位方法
Selenium是用于Web应用测试的自动化测试框架,可以实现跨浏览器和跨平台的Web自动化测试。Selenium通过使用WebDriver API来控制web浏览器,每个浏览器都都有一个特定的WebDriver 驱动,处理与Selenium和浏览器之间的通信。
实现Web页面自动化控制的先决条件是定位到正确的Web页面元素,WebDriver提供了8种不同的Web元素定位方法:
| Locator | Description |
|---|---|
| id | ID属性,最常用的定位方法,每个元素的id应该是唯一的 |
| css selector | CSS 选择器 |
| xpath | xpath表达式定位元素 |
| name | NAME属性,与id定位类似 |
| link text | 仅用于超链接文本 |
| partial link text | 使用方法和link text相同,partial link 只截取部分文字即可 |
| tag name | 通过HTML标签名定位 |
| class name | 使用类名定位,不能使用复合类名 |
ID定位

python代码:
element = self.driver.find_element_by_id("kw") element = self.driver.find_element(By.ID,"kw").send_keys("test")
NAME定位

python代码:
element = self.driver.find_element_by_name("wd")
Link Text定位

python代码:
element = self.driver.find_element_by_link_text("学术")
Partial Link Text定位
使用部分文本来定位
直接使用“123”来定位:

python代码:
element = self.driver.find_element_by_partial_link_text(**"123"**)
Xpath定位
XPath 使用路径表达式来选取 XML 文档中的节点或节点集。具体语法参考:https://www.w3school.com.cn/xpath/xpath_syntax.asp
比如我们定位“资讯”:

可以在console中输入JS代码:$x('//*[@id="s_tab"]//a[1]')
这样就可以找到资讯对应的元素:

python代码:
element = self.driver.find_element_by_xpath('//*[@id="s_tab"]//a[1]')
CSS Selector定位
CSS选择器是一种字符串模式,基于HTML标签,id,类和属性的组合来标识元素。
具体语法参见:https://www.runoob.com/cssref/css-selectors.html
我们依然定位“资讯”:
在console中输入:$('#s_tab a:nth-child(2)')

python代码:
element = self.driver.find_element_by_css_selector("#s_tab a:nth-child(2)")
完整测试代码
#!/usr/bin/python3
# -*-coding:utf-8-*-
from time import sleep
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLocator():
def setup(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5)
# self.driver.maximize_window()
def teardown(self):
self.driver.quit()
def test_id(self):
self.driver.get("https://www.baidu.com/")
element = self.driver.find_element_by_id("kw")
element.send_keys("test")
# self.driver.find_element(By.ID,"kw").send_keys("test")
assert element.get_attribute("value") == "test"
def test_name(self):
element = self.driver.find_element_by_name("wd")
element.send_keys("test")
assert element.get_attribute("value") == "test"
def test_linktext(self):
self.driver.get("https://www.baidu.com/")
element = self.driver.find_element_by_link_text("学术")
element.click()
sleep(5)
def test_partial_link_text(self):
self.driver.get("https://www.baidu.com/")
element = self.driver.find_element_by_partial_link_text("123")
element.click()
sleep(5)
def test_xpath(self):
self.driver.get("https://www.baidu.com/")
self.driver.find_element_by_id("kw").send_keys("test")
sleep(2)
self.driver.find_element_by_id("su").click()
sleep(2)
element = self.driver.find_element_by_xpath('//*[@id="s_tab"]//a[1]')
element.click()
sleep(10)
def test_css(self):
self.driver.get("https://www.baidu.com/")
self.driver.find_element_by_id("kw").send_keys("test")
sleep(2)
self.driver.find_element_by_id("su").click()
sleep(2)
element = self.driver.find_element_by_css_selector("#s_tab a:nth-child(2)")
element.click()
if __name__ == '__main__':
pytest.main()
总结
在工作中比较常用的是ID和NAME定位,用起来比较方便。但很多情况下没有ID或者ID是动态变化的(比如使用Extjs生成的web页面),需要用到CSS Selector和Xpath来定位。
Xpath是一种XML路径语言,定位时采用遍历页面的方式,基本上能定位到所有web元素。CSS Selector 是一种样式表语言,查找 HTML DOM 中的元素。理论上CSS Selector比Xpath效率更高,个人感觉没有显著差异。其它差异还包括:
- Xpath可以通过文本来定位,而CSS Selector不能。
- Xpath可以通过子节点来定位父节点,CSS Selector是前向的,不能利用子节点定位父节点。
- CSS Selector语法相比Xpath更加简洁
--THE END--
文章标题:Selenium Web元素定位方法
本文作者:hiyo
本文链接:https://hiyong.gitee.io/posts/selenium_webelement_locator/
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
Selenium Web元素定位方法的更多相关文章
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍
这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...
- Selenium常见元素定位方法和操作的学习介绍
参考地址: https://www.cnblogs.com/eastmount/p/4810690.html 这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操 ...
- 5 Python+Selenium的元素定位方法(xpath)
[环境] Python3.6+selenium3.0.2+FireFox50+win7 [定位方法] 1.方法:find_element_by_xpath('') 说明:xpath定位方法有相对路径和 ...
- 4 Python+Selenium的元素定位方法(link/partial link)
[环境] Python3.6+selenium3.0.2+IE11+win7 [定位方法] 1.link/partial link定位方法:定位的元素为文字链接且链接很长时 方法:find_eleme ...
- 3 Python+Selenium的元素定位方法(id、class name、name、tag name)
[环境] Python3.6+selenium3.0.2+IE11+Win7 [定位方法] 1.通过ID定位 方法:find_element_by_id('xx') 2.通过name定位 方法:fin ...
- selenium的元素定位方法-By
如果在定位元素属性中包含了如ID等元素属性,那么在一个测试中,定位方法具体有哪几种,可以参考by模块中的By类,By的代码如下: class By(object): """ ...
- selenium八大元素定位方法
1.ID定位 可以根据元素的id来定位属性,id是当前整个HTML页面中唯一的,所以可以通过id属性来唯一定位一个元素,是首选的元素定位方式.(动态ID不做考虑) # 导入webdriver和By f ...
- 6 Python+Selenium的元素定位方法(CSS)
[环境] python3.6+selenium3.0.2+Firefox50.0+win7 [定位方法] 1.方法:find_element_by_css_selector('xx') CSS的语法比 ...
随机推荐
- leetcode 33和 leetcode81
//感想: 1.对于这两题,我真的是做到吐,这篇博客本来是昨晚准备写的,但是对于这个第二题,我真的做到头痛,实在是太尼玛的吐血了,主要是我也是头铁,非要找到那个分界点. 2.其实之前在牛客网上做过非常 ...
- iOS 默认Cell选中
NSInteger selectIndex = [NSIndexPath indexPathForItem:0 inSection:0]; [self.ui_tableView selectRowAt ...
- 微信小程序 下拉刷新
<scroll-view class='scroll-view-container' scroll-y="true" bindscrolltolower='scrollToL ...
- 【2020.12.02提高组模拟】A组反思
55,rk47 T1 赛时先想了\(trie\),想到不一定是前缀,然后就放弃转为打暴力 得分:\(RE22\) 正解是只用判断\(i\)与\(i+1\)的关系,那么只有两种情况,判断一下然后\(dp ...
- MongoEngine模块
今儿,接到老的的要求,要把新功能的数据存放在Mongo里.虽然一直都有听过Mango的鼎鼎大名,但是那也只是见过没用过,跟个小白没啥区别.在加上功能急需,没办法只能赶鸭子上架先上再说.下面这篇就是我赶 ...
- 你想不到的win10快捷键
1.虚拟桌面 1.1 创建 ctrl + win + d 1.2 切换 ctrl + win + 左/右箭头 1.3 关闭 ctrl + win + f4 2. 应用窗口 2.1 打开的全部最小化 w ...
- 第7.5节 揭开Python类中self的面纱
在上节已经引入介绍了类定义,并简单介绍了类变量.实例变量.类方法和实例方法,后面章节还会进一步详细介绍相关的内容.本节要介绍的self是与类变量.实例变量.类方法和实例方法具体定义实现强相关的. 一. ...
- Thread interrupt() 线程中断的详细说明
GitHub源码地址 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止 ...
- RSA简单实践
RSA公钥文件解密密文的原理分析 前言 最近在学习 RSA 加解密过程中遇到一个这样的难题:假设已知 publickey 公钥文件和加密后的密文 flag ,如何对其密文进行解密,转换成明文~~ 分析 ...
- ATT&CK 实战 - 红日安全 vulnstack (二) 环境部署(劝退水文)
靶机下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/ 靶场简述 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习.视频教程.博 ...