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效率更高,个人感觉没有显著差异。其它差异还包括:

  1. Xpath可以通过文本来定位,而CSS Selector不能。
  2. Xpath可以通过子节点来定位父节点,CSS Selector是前向的,不能利用子节点定位父节点。
  3. CSS Selector语法相比Xpath更加简洁

--THE END--

文章标题:Selenium Web元素定位方法

本文作者:hiyo

本文链接:https://hiyong.gitee.io/posts/selenium_webelement_locator/

欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

Selenium Web元素定位方法的更多相关文章

  1. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  2. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  3. Selenium常见元素定位方法和操作的学习介绍

    参考地址: https://www.cnblogs.com/eastmount/p/4810690.html 这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操 ...

  4. 5 Python+Selenium的元素定位方法(xpath)

    [环境] Python3.6+selenium3.0.2+FireFox50+win7 [定位方法] 1.方法:find_element_by_xpath('') 说明:xpath定位方法有相对路径和 ...

  5. 4 Python+Selenium的元素定位方法(link/partial link)

    [环境] Python3.6+selenium3.0.2+IE11+win7 [定位方法] 1.link/partial link定位方法:定位的元素为文字链接且链接很长时 方法:find_eleme ...

  6. 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 ...

  7. selenium的元素定位方法-By

    如果在定位元素属性中包含了如ID等元素属性,那么在一个测试中,定位方法具体有哪几种,可以参考by模块中的By类,By的代码如下: class By(object): """ ...

  8. selenium八大元素定位方法

    1.ID定位 可以根据元素的id来定位属性,id是当前整个HTML页面中唯一的,所以可以通过id属性来唯一定位一个元素,是首选的元素定位方式.(动态ID不做考虑) # 导入webdriver和By f ...

  9. 6 Python+Selenium的元素定位方法(CSS)

    [环境] python3.6+selenium3.0.2+Firefox50.0+win7 [定位方法] 1.方法:find_element_by_css_selector('xx') CSS的语法比 ...

随机推荐

  1. C语言讲义——全局变量和局部变量

    局部变量 普通的局部变量也叫动态变量,默认有个关键字叫auto,可以省略.有两种形式: 1.函数内的局部变量 2.复合语句内的局部变量:for(int i = 0; i<5; i++){-} 静 ...

  2. kafka入门之broker--日志存储设计

    kafaka并不是直接将原省消息写入日志文件的,相反,它会将消息和一些必要的元数据信息大宝在一起封装成一个record写入日志.其实就是我们之前介绍的batch 具体对每个日志而言,kafka又将其进 ...

  3. PDF文件处理助手 3.3.2版本更新

    本次更新内容如下: 1.修复部分PDF在"去水印"-"文字水印"-"模式3"下识别不到的问题. 2.修复部分情况下可能无法正确加载授权的问题 ...

  4. wsgi_uwsgi_nginx

    1.一些重要概念 https://www.cnblogs.com/xiaonq/p/8932266.html 1.1 web容器 什么是web容器 1.web容器是帮助我们部署java.php.pyt ...

  5. LeetCode 029 Divide Two Integers

    题目要求:Divide Two Integers Divide two integers without using multiplication, division and mod operator ...

  6. Spring Cloud Alibaba 初体验(二) Nacos 服务注册与发现 + 集成 Spring Cloud Gateway

    一.服务注册 添加依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...

  7. 数据库:Flask-SQLAlchemy

    一.安装以及使用 1.安装 安装 flask-sqlalchemy pip install flask-sqlalchemy 如果连接的是 mysql 数据库,需要安装 mysqldb pip ins ...

  8. MAC下go语言的安装和配置

    Mac下安装一些文件都是比较简单的.安装了brew以后,很多的程序只要一条命令就搞定了. brew install go 安装好go语言以后主要是配置go_path,和go_root的地址. go_r ...

  9. 第8.6节 Python类中的__new__方法深入剖析:调用父类__new__方法参数的困惑

    上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述 ...

  10. PyQt学习随笔:使用PyCharm+PyQt开发遇到的坑

    最近三天,老猿都在使用PyCharm+QtDesigner工具,通过xlwings读取Excel的数据到TableView中显示的练习,本以为很容易的一件事,断断续续持续了三天时间才终于成功.在这个过 ...