元素的定位
web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。
常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector
常用的主要由cssSelector和xpath
find_elements(方式,“元素”)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
#驱动程序管理的⾃动化
#创建驱动对象
#1.打开浏览器
driver =webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
#2.输⼊百度⽹址:https://www.baidu.com
driver.get("https://www.baidu.com")
#3、找到输⼊框并输⼊“迪丽热巴”
ret=driver.find_elements(By.CSS_SELECTOR,"#s-hotsearch-wrapper")
for i in ret:
print(i.text)
#5、关闭浏览器
driver.quit()

cssSelector
选择器的功能:选中页面中指定的标签元素
选择器的种类分为基础选择器和复合选择器,常见的元素定位方式可以通过id选择器和子类选择器来进行定位。
xpath
XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点。
xpath使用路径表达式来选择xml文档中的节点。
获取HTML页面所有的节点://*
选中当前页面
获取HTML页面指定的节点://[指定节点]
- //ul:获取HTML页面所有的ul节点
- //input:获取HTML页面所有的input节点
获取⼀个节点中的直接子节点:/
- //span/input

获取⼀个节点的父节点:..
//input/..获取input节点的父节点
实现节点属性的匹配:[@…]
//*[@id='kw']匹配HTML页面中id属性为kw的节点

使用指定索引的方式获取对应的节点内容:
注意:xpath的索引是从1开始的。百度首页通过://div/ul/li[3]定位到第三个百度热搜标签;
更便捷的生成selector/xpath的方式:右键选择复制"Copy selector/xpath"
问题:既然可以手动复制 selector/xpath的方式 ,为什么还有了解语法?
手动复制的selector/xpath表达式并不⼀定满足上面的唯⼀性的要求,有时候也需要手动的进行修改表达式
操作测试对象
获取到了页面的元素之后,接下来就是要对元素进行操作了。常见的操作有点击、提交、输入、清 除、获取文本。(在python中单引号和双引号不区分)
点击/提交对象
click()
#找到百度⼀下按钮并点击
driver.find_element(By.CSS_SELECTOR, "#chat-submit-button").click()
ele=driver.find_element(By.CSS_SELECTOR, "#chat-submit-button")
ele.click()
模拟按键输入
send_keys("") 模拟键盘输入,键盘输入的都能模拟
driver.find_element(By.CSS_SELECTOR, "#chat-textarea").send_keys("迪丽热巴")
ele.driver.find_element(By.CSS_SELECTOR, "#chat-textarea")
ele..send_keys("迪丽热巴")
清除文本内容
输入文本后又想换⼀个新的关键词,这里就需要用到 clear()
连续的send_keys()会将多次输入的内容拼接到一起
driver.find_element(By.CSS_SELECTOR, "#chat-textarea").send_keys("迪丽热巴")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,"#chat-textarea").clear()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#chat-textarea").send_keys("古⼒娜扎")
获取文本信息
如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印⼀下~~
获取文本信息: text text的返回信息是字符串
text=driver.find_element(By.CSS_SELECTOR,"#hotsearch-content-wrapper > li:nth-child(2) > a > span.title-content-title").text
print(text)


也可以用assert进行断言检查是否符合预期
问题:是否可以通过 text 获取到“百度⼀下按钮”上的文字“百度⼀下”呢?尝试⼀下
![]()
之前是不能,现在能了,之前是value="百度一下"value是属性,value="百度一下"是属性值所以不能。
注意:文本和属性值不要混淆了。获取属性值需要使用方法 get_attribute("属性名称") ;
text=driver.find_element(By.CSS_SELECTOR,"#chat-submit-button").get_attribute('value')
print(text)
获取当前页面标题
title
title = driver.title
获取当前页面URL
current_url
url = driver.current_url


窗口
打开⼀个新的页面之后获取到的title和URL仍然还是前⼀个页面的?
当我们手工测试的时候,我们可以通过眼睛来判断当前的窗口是什么,但对于程序来说它是不知道当前最新的窗口应该是哪⼀个。对于程序来说它怎么来识别每⼀个窗口呢?每个浏览器窗口都有⼀个唯一的属性句柄(handle)来表示,我们就可以通过句柄来切换 
切换窗口
- 获取当前页面句柄:driver.current_window_handle
- 获取所有页面句柄: driver.window_handles
- 切换当前句柄为最新页面:
#获取当前页面句柄-第一个标签页
curhandle=driver.current_window_handle
#获取所有句柄
allhandle=driver.window_handles
#遍历所有句柄,切换到新的页面
for handle in allhandle:
if handle != curhandle:
driver.switch_to.window(handle)

若页面跳转后没有打开新的标签页,则不需要发生窗口的切换;
窗口设置大小
窗口的大小设置:
#窗⼝最⼤化
driver.maximize_window()
#窗⼝最⼩化
driver.minimize_window()
#窗⼝全屏
driver.fullscreen_window()
#⼿动设置窗⼝⼤⼩
driver.set_window_size(1024,768)
屏幕截图
我们的自动化脚本⼀般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景
driver.save_screenshot('../images/image.png')

运行前后
也可以创建文件夹,在创建的文件夹下存放
重名文件将被覆盖,那么将每次生成的图片文件名称不一样即可(以时间加名称)
filename = "autotest-"+datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')+'.png'
#./images/autotest-2026-02-06-164656.png //文件名以字符串形式
driver.save_screenshot('./images/'+filename)

关闭窗口
driver.close()
注意:窗口关闭后driver要重新定义;
driver.quit() 表示推出浏览器,可能有多个窗口,执行后所有的标签页都被关闭
driver.close() 表示推出一个窗口
弹窗
弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口
警告弹窗+确认弹窗
弹窗定位不到元素

alert = driver.switchTo.alert
//确认
alert.accept()
//取消
alert.dismiss()
页面出现弹窗后,必须先处理弹窗后才能定位到页面其他元素;
警告弹窗时选取accept和dismiss都一样,因为只有一个选项只是名字不同;
提示弹窗

alert = driver.switchTo.alert
alert.send_keys("hello")
alert.accept()
alert.dismiss()
等待
通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法:
强制等待
time.sleep()
脚本执行速度快,而页面渲染速度慢,当页面执行到代码时页面还没渲染成功导致找不到元素,可以用sleep等待渲染。
优点:使用简单,调试的时候比较有效
缺点:影响运行效率,浪费大量的时间
隐式等待
隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。
implicitly_wait() 参数:秒
隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉( driver.quit() ),隐 式等待就⼀直生效。一般放在代码开头。
优点:智能等待,作用于全局
显示等待
显示等待也是⼀种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码。(可以只作用在一行代码上)
WebDriverWait(driver,sec).until(functions)
#sec 秒
functions :涉及到selenium.support.ui.ExpectedConditions包下的 ExpectedConditions 类

ExpectedConditions 预定义方法的⼀些示例:
- 方法:title_is(title)
- 说明:检查页面标题的期望值
- 方法:title_contains(title)
- 说明:检查标题是否包含区分大小写的子字符串的期望值
- 方法:visibility_of_element_located(locator, str])
- 说明:检查元素是否存在于页面的DOM上并且可见的期望值。
- 方法:presence_of_element_located(locator, str])
- 说明:用于检查元素是否存在于页面的DOM上的期望值
- 方法:visibility_of(element)
- 说明:检查已知存在于页面DOM上的元素是否可见的期望
- 方法:visibility_of(element)
- 说明:检查是否出现弹窗
隐式等待无法等待弹窗,因为弹窗不是页面元素,无法通过页面元素来定位。显示等待可以处理。
优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活
缺点:写法复杂
不建议显示等待和隐式等待一起出现。当找一个不存在的元素时候可能会导致不可预测的等待时间
浏览器导航
常见操作:

案例:百度首页测试https://tool.lu/标签入口
文件上传
点击文件上传的场景下会弹窗系统窗口,进行文件的选择。
当通过页面元素调起上传的窗口后,文件窗口不能作为页面元素选中。
selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素,但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。通过send_keys()将本地的文件(路径加文件名)上传
ele = driver.find_element(By.CSS_SELECTOR,"body > div > div >
input[type=file]")
ele.send_keys("D:\\\\file\\\\test.txt")
浏览器参数设置
设置无头模式:
无头模式:程序在后端运行,界面看不到页面的表现。看不到执行的过程
options = webdriver.ChromeOptions()
options.add_argument("-headless") //设置参数 -headless:无头模式 不设参数默认有头模式
driver =webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)

看不到浏览器打开的过程;
页面加载策略:
options.page_load_strategy = '加载⽅式'
driver.get()会默认等到资源加载完成才会继续往下执行,但实际上主页面加载完成之后就可以继续执行自动化,若一直等待的话会导致页面超时,元素找不到问题等
页面加载方式主要有三种类型:
- 策略:normal
- 说明:默认值,等待所有资源下载

- 策略:eager
- 说明:DOM访问已准备就绪,但诸如图像的其他资源可能仍在加载
- 策略:none
- 说明:完全不会阻塞WebDriver
options = webdriver.ChromeOptions()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=options)
网硕互联帮助中心



![基于深度学习的糖尿病视网膜病变诊断系统[python]-计算机毕业设计源码+LW文档-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/02/20260206021924-69854fac5d043-220x150.jpg)

评论前必须登录!
注册