Python Selenium 自动化测试实战:输入、点击与页面交互

Owen
Owen
发布时间:2026-10-12 | 3人浏览过
原创

本文介绍如何使用 Python 和 Selenium 进行自动化测试,涵盖浏览器启动、元素定位(XPath)、输入与点击操作、页面跳转及断言验证。通过百度搜索“胡歌”的完整案例,演示如何获取页面标题、URL,处理多窗口切换,以及实现前进后退功能,帮助开发者掌握基础自动化测试流程。

自动化测试核心流程与元素定位

在进行 Web 自动化测试时,首要任务是准确定位页面元素。以百度搜索“胡歌”为例,测试目标包括打开百度首页、在搜索框输入关键词、点击提交按钮,并验证搜索结果中是否包含特定链接(如“胡歌的新浪微博”)。

获取元素定位信息(XPath)的标准操作流程如下:

  1. 在浏览器中按 F12 打开开发者工具。
  2. 点击左上角的箭头图标,或使用快捷键 Ctrl + Shift + C 进入元素拾取模式。
  3. 将光标移至目标页面元素上,查看对应的 HTML 代码。
  4. 右键点击该代码行,选择 Copy > Copy XPath 获取路径。

在百度搜索场景中,搜索输入框的 XPath 为 //*[@id="kw"],而提交按钮(“百度一下”)的 XPath 为 //*[@id="su"]。

完整测试脚本实现

以下代码展示了从启动浏览器到结束测试的完整流程。脚本首先初始化 Chrome 驱动,设置窗口最大化及隐式等待时间,随后执行搜索操作并验证结果。

import time
from selenium import webdriver

'''
测试用例:打开百度首页,搜索“胡歌”,然后检索列表,有无“胡歌的新浪微博”这个链接
场景拆分:
 1)启动Chrome浏览器
 2) 打开百度首页,https://www.baidu.com
 3)定位搜索输入框,输入框元素XPath表达式://*[@id="kw"]
 4)定位搜索提交按钮(百度一下)://*[@id="su"]
 5)在搜索框输入“胡歌”,点击百度一下按钮
 6)在搜索结果列表判断是否存在“胡歌的新浪微博”这个链接
 7)退出浏览器,结束测试
'''
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(8) # 设置隐式等待时间

driver.get("https://www.baidu.com") # 地址栏里输入网址
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("胡歌") # 搜索框输入胡歌
driver.find_element_by_xpath('//*[@id="su"]').click() # 点击百度一下按钮

time.sleep(2) # 等待2秒
# 通过元素XPath来确定该元素是否显示在结果列表,从而判断“壁纸”这个链接是否显示在结果列表
# find_element_by_link_text当找不到此链接时报错,程序停止
driver.find_element_by_link_text('胡歌的新浪微博').is_displayed()
driver.quit()

页面状态验证与断言

自动化测试的关键在于验证。我们可以通过获取当前页面的 title 和 current_url 来确认页面跳转是否正确,这些字段可作为测试的预期结果进行断言。

标题验证方法

获取当前页面标题的代码如下:

# 获取当前页面标题显示的字段
print(driver.title)

验证标题通常有两种方式:

  1. 包含判断:使用 assert 检查标题中是否包含特定字符串。若失败,捕获异常并输出错误信息。
  2. 完全相等判断:直接比较 driver.title 与预期字符串是否完全一致。
# 1) 包含判断
# assert:断言,声称
try:
 assert "百度一下" in driver.title
 print("断言测试成功.")
except Exception as e:
 print("断言失败.",format(e))

# 2) 完全相等判断
if "百度一下,你就知道" == driver.title:
 print("成功.")
else:
 print("失败.")

print(driver.title)

高级页面交互操作

除了基本的输入点击,自动化测试还常涉及多窗口处理、页面导航及浏览器信息获取。

新标签页与窗口切换

通过 JavaScript 打开新标签页是一种常见做法,因为某些键盘快捷键模拟(如 Keys.CONTROL + 't')可能在特定环境下无效。打开新窗口后,需切换至新句柄(handle)以执行后续操作。

try:
 # 新标签页,此处用js实现,在有些博客上显示使用
 # driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL, 't')
 # 我这测试无效,原因不知,于是采用如下方法
 js = "window.open('http://www.acfun.cn/')"
 driver.execute_script(js)

 # 切换到新的窗口
 handles = driver.window_handles # 获取窗口句柄
 driver.switch_to.window(handles[-1]) # 切换到最后一个既最新打开的窗口

 # 先切换窗口再打开新网址,才是在新窗口打开网址,不然还是在原来的百度页面打开此网址
 driver.get('http://map.baidu.com/')

except Exception as e:
 print("发现异常,",format(e))

页面前进与后退

Selenium 提供了 driver.back() 和 driver.forward() 方法,分别用于模拟浏览器的后退和前进按钮。操作前需确保页面已加载,必要时可配合 time.sleep() 等待。

driver.get("https://www.baidu.com")
time.sleep(2)
'''前进,后退'''
elem_news = driver.find_element_by_link_text("新闻").click() # 点击进入新闻
time.sleep(2)
driver.back() # 后退到百度首页
time.sleep(2)
driver.forward() # 从百度前进到新闻页
time.sleep(2)

获取浏览器信息

通过 driver.capabilities['version'] 可以获取当前浏览器会话的版本号。这有助于在测试报告中记录环境信息。

# 获取浏览器版本号
"""
 Creates a new session with the desired capabilities.

 :Args:
 - browser_name - The name of the browser to request.
 - version - Which browser version to request.
 - platform - Which platform to request the browser on.
 - javascript_enabled - Whether the new session should support JavaScript.
 - browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested.
"""
print(driver.capabilities['version'])

以上就是 Python Selenium 自动化测试中输入、点击及页面交互操作的详细内容,更多关于 Python 自动化测试与 Selenium 高级用法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表