前进、后退、刷新等页面导航操作
演示浏览器 历史栈(History Stack) 的导航操作。get / back / forward / refresh 四个方法看似简单,但底层依赖同一个历史记录数据结构。
历史栈原理:
driver.get(A) 压栈 → 指针指向 A,右侧历史被清空back() 指针左移一格,不删除历史forward() 指针右移一格,前提是之前 back 过refresh() 重载当前页,指针不动,历史不变💡 容易踩坑:新开标签(window.open)在新标签里调 back() 没用 —— 每个标签的历史栈是独立的。
driver.get / driver.back / driver.forward / driver.refresh / driver.title / driver.current_url
# 快速参考 driver.get("https://example.com") assert "Example" in driver.title driver.get("https://selenium.dev") driver.back() assert "example.com" in driver.current_url driver.forward() driver.refresh()
driver.get() 打开本页,断言 title 包含「浏览器操作练习」、current_url 以 .html 结尾driver.back() 回 A 并断言标题与 URL,driver.forward() 再到 B 并断言driver.refresh() 刷新当前页,断言刷新后 title、current_url 非空且页面正常渲染
操作步骤:
① 使用 driver.get() 加载本页,断言 title 包含「浏览器操作练习」,current_url 以 .html 结尾。
② 通过模拟点击「子页面 A → 子页面 B」观察 URL 变化,再使用 back() 回退、forward() 前进,每步都断言地址栏与页面标题的显示值同步变化。
③ 最后使用 refresh() 刷新页面,断言「刷新次数」面板值每次增加(可调用多次验证)。
欢迎来到练习 2 模拟浏览器场景。这里模拟了一个小型的浏览器导航栈,用于练习 driver 的导航 API。点击下方链接跳转子页面。
这里是子页面 A,用户可以在真实场景下使用 driver.back() 返回首页。页面标题与 URL 都已更新,请使用断言确认。
这里是子页面 B,练习使用 driver.forward() 与 driver.back() 在 A ↔ B 之间切换。
这里是子页面 C,最后请使用 driver.refresh() 刷新当前页,观察下方刷新计数。
Python 自动化测试学习平台是一个面向软件测试工程师、开发人员及在校学生的交互式在线学习平台,专注于 Selenium WebDriver 与 Python unittest 自动化测试技能的教学与实践。
我们以"理论 + 实战 + 可交互演示"为核心特色,将八种常规元素定位和Javascript定位、元素操作、自动化测试工具、单元测试、测试模型等知识体系拆分为模块化课程,每个模块都配有可点击、可输入、可运行的模拟练习页面。
平台致力于降低自动化测试的入门门槛,让学习者从"看懂代码"到"动手实操",逐步掌握企业级自动化测试框架的设计与落地能力。
📧邮箱:lq@selenium-auto-test.com
📞电话:0755-12345678
📍地址:深圳
💬微信公众号:Selenium自动化测试
🐙GitHub:github.com/selenium-auto-test
1. 本平台所有示例代码、演示页面及教程内容均仅供学习交流使用,不构成任何商业推广或技术服务承诺。
2. 平台中的 Selenium API 描述、Python 语法说明均以官方文档为准,如有版本差异请以对应官方文档为准。
3. 学习者在实际项目中应用平台所学内容时,应结合自身项目环境进行充分测试,本平台不对因直接使用示例代码而产生的任何直接或间接损失承担责任。
4. 本平台所引用的第三方库(Selenium、ChromeDriver、unittest 等)版权归其各自作者及维护者所有。
5. 如涉及版权问题或内容建议,请及时通过联系方式与我们沟通,我们将第一时间处理。
# 练习 3 参考答案 import time from selenium.webdriver.common.by import By # 1. get 打开页面并断言 title / current_url driver.get("file:///f:/autotest_project/browser_op_practice.html") assert "浏览器操作练习" in driver.title assert driver.current_url.endswith(".html") print(f"title={driver.title}") print(f"url={driver.current_url}") # 2. 模拟点击:首页 -> 子页面 A -> 子页面 B(通过点击页面链接,真实场景下是 driver.get 新 URL) links = driver.find_elements(By.CLASS_NAME, "nav-link") # 先点第一个(子页面 A) links[0].click() time.sleep(0.5) assert "个人中心" in driver.find_element(By.ID, "nav_title_text").text # 当前页面上再点「前往 B」(需要重新获取链接) driver.find_element(By.XPATH, "//span[contains(text(),'继续前往 子页面 B')]").click() time.sleep(0.5) assert "购物车" in driver.find_element(By.ID, "nav_title_text").text # 3. back() 回退到 A driver.back() time.sleep(0.5) # 使用面板断言(真实场景应使用 driver.title / current_url) assert "个人中心" in driver.find_element(By.ID, "nav_title_text").text # 4. forward() 前进到 B driver.forward() time.sleep(0.5) assert "购物车" in driver.find_element(By.ID, "nav_title_text").text # 5. refresh() 多次,断言刷新计数增加 before = int(driver.find_element(By.ID, "refresh_count").text) driver.refresh() # 注意:refresh() 会重载整个页面,面板值会清零;真实场景下刷新计数需要结合 URL 参数或 Cookie 保持 # 更稳妥的方式:用 driver.refresh() + title/current_url 非空断言 assert driver.title != "" assert driver.current_url != ""