WebUI自动化测试之Selenium学习笔记(一)元素定位

本文介绍了Selenium与WebDriver的结合使用,详细讲解了如何利用XPath进行元素定位,包括XPath路径表达式、谓语用法和匹配未知节点的方法。在实际应用中,需注意ChromeDriver版本与浏览器的匹配,同时推荐了Selenium提供的浏览器插件以简化测试工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Selenium与WebDriver简介

Selenium的好处是可以模拟用户操作,在浏览器上自动进行测试,功能测试时可以自动保存cookie等信息无需代码发送。webDriver本是selenium1的竞争对手,后来二者进行了整合,结合了各自的优势,形成了webdriver。

#python3.7
#引用
from selenium import webdriver
#浏览器有很多种,我用的是chrome
browser = webdriver.Chrome()

ps. 调用Chrome需要下载Chromedrive.exe驱动放在python根目录下。
需要注意的是,一定要查看Chrome版本下载对应的驱动版本,否则运行代码时会导致浏览器无限重启报错。
贴一个国内ChromeDriver的下载镜像: https://npm.taobao.org/mirrors/chromedriver/

2. 基本语法

① 声明实例: browser = webdriver.Chrome()
② 打开网页: browser.get()
③ 查找元素: 定位页面中的元素,从而完成点击输入等操作

#打开网页
url = "https://www.baidu.com/"
browser = webdriver.Chrome()
browser.get(url)

#查找页面元素的方法:
element = browser.find_element_by_id()
element = browser.find_element_by_name()
element = browser.find_element_by_xpath()
element = browser.find_element_by_link_text()
element = browser.find_element_by_partial_link_text()
element = browser.find_element_by_tag_name()
element = browser.find_element_by_class_name()
element = browser.find_element_by_css_selector()

browser.close()

插件工具: Selenium为Chrome和Firefox提供了浏览器插件,可以用来记录浏览器的操作行为,并生成Python代码. 可以简化一部分工作量.https://www.selenium.dev/downloads/

① 与postman有一点类似,新建一个测试项目:
在这里插入图片描述
② 测试用例录制后,选择Export导出在这里插入图片描述
③ 然后选择对应的导出语言在这里插入图片描述

eg. 以百度搜素首页为例进行元素的定位

1、<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

2、<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>

3、<div class="bdbriimgtitle">更多产品</div>

对应的元素检索方法:

element = browser.find_element_by_id("kw")
element = browser.find_element_by_name("wd")
element = browser.find_element_by_xpath()
element = browser.find_element_by_link_text("新闻")
element = browser.find_element_by_partial_link_text("产品")
element = browser.find_element_by_tag_name("input")
element = browser.find_element_by_class_name("s_ipt")
element = browser.find_element_by_css_selector()
#关于find_element_by_xpath的使用方法,有通过元素属性定位,和通过绝对路径定位两种,推荐通过元素属性定位
#结尾有Xpath的语句结果说明
#选取所有属性id=kw的标签
element = browser.find_element_by_xpath(" //*[@id="kw"] ")
#选取所有属性class=s_ipt的标签
element = browser.find_element_by_xpath(" //*[@class="s_ipt"] ")
#使用条件组合
element = browser.find_element_by_xpath(" //*[@id="kw" and @class="s_ipt"]")
#选取所有属性maxlength=255的input标签
element = browser.find_element_by_xpath(" //input[@maxlength="255"] ")
#通过绝对路径定位
#说明:div[2]表示第二个 div 标签
element = find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")
#关于tag_name的使用方法,tag_name就是每个元素的标签名:
# coding="utf-8"
 
from selenium import webdriver
import os,time
 
driver = webdriver.Chrome()
#path.abspath()方法用于获取当前路径下的文件
file_path = "file:///" + os.path.abspath("checkbox.html")
print(file_path)
driver.get(file_path)
 
#选择页面上所有的tag name为input的元素
inputs = driver.find_elements_by_tag_name("input")
 
#然后从中过滤出type为checkbox的元素,单击勾选
for i in inputs:
    if i.get_attribute("type") == "checkbox":
        i.click()
        time.sleep(5)
 
driver.quit()

3. Xpath定位方法

1. XPath路径表达式:
表达式描述
nodeName选取此节点的所有子节点。
/从根节点选取该元素。
//选取匹配当前名称的所有节点,不考虑节点位置。
.选取当前节点。
. .选取当前节点的父节点。
@选取属性。

举个例子:

表达式描述
bookStore选取bookStore元素的所有子节点。
/bookStore选取名为bookStore的根元素。
bookStore/book选取bookStore下的所有book元素。
//book选取所有book元素,而不管他们在文档中的位置。
bookStore//book选取bookStore下的所有book元素,而不管他们在bookStore中位置。
//@languane选取名为language的所有属性。
2. XPath谓语用法:
表达式结果
/bookStore/book[1]选取属于 bookStore 子元素的第一个 book 元素。
/bookStore/book[last()]选取属于 bookStore 子元素的最后一个 book 元素。
/bookStore/book[last() - 1]选取属于 bookStore 子元素的倒数第二个 book 元素。
/bookStore/book[position() < 3]选取属于bookStore book 子元素的前两个book元素。
//title[@lang]选取拥有名为lang属性的title元素
//title[@lang=‘eng’]选取lang属性为eng的title元素
/bookStore/book[price>35.00]选取bookStore下的book元素,且book元素中的price元素值大于35.00
/bookStore/book[price>35.00]//title选取bookStore中price大于35的book元素下的所有title元素
3. 匹配未知节点:
通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

举个例子:

路径表达式结果
/bookstore/*选取 bookstore 元素下的所有子元素。
//*选取文档中的所有元素
//title[@*]选取所有带属性的title元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值