浏览器操作作业 · 页面导航

前进、后退、刷新等页面导航操作

首页 浏览器操作导航

页面导读 · 页面导航

driver.get() vs navigate().to(),back()/forward()/refresh() 的行为差异

学习目标
理解 get() 和 navigate() 的异同,掌握前进后退刷新三件套
核心 API
driver.get() · driver.back() · driver.forward() · driver.refresh() · driver.navigate().to()
作业数量
3 题基础 · 无进阶
难度:⭐⭐ 入门
⚠️ 前置注意: get() 会等页面加载完才返回(默认),navigate() 立即返回
参数配置 打开关闭 页面导航 窗口控制 页面信息 元素交互 Cookie操作 截图保存 超时等待

操作 3:页面导航 back · forward · refresh

driver.back() 返回上一页 · forward() 前进到下一页 · refresh() 刷新当前页面。

History Stack(历史栈)—— 理解 back/forward 的关键
每个标签页内部维护一个 历史栈,当前光标指向其中某一项:
[A] → [B] → [C] ← 当前(cursor)
back() = cursor 左移一位 → 显示 B;forward() = cursor 右移一位 → 显示 C
driver.get(D) 会清空 cursor 右边的所有记录,然后把 D 追加到末尾
⚠️ back() 到最左边不会报错;forward() 到最右边也不会报错 —— 静默 no-op

练习目标:访问 A → B → C,然后 back / forward / refresh

"""
历史导航三部曲 —— 完整示例
"""
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(1)

# ===== 构建 history stack =====
driver.get("https://www.page-a.com")     # stack: [A]         cursor → A
driver.get("https://www.page-b.com")     # stack: [A, B]      cursor → B
driver.get("https://www.page-c.com")     # stack: [A, B, C]   cursor → C

# ===== back() / forward() =====
driver.back()                            # cursor → B, 显示 page-b
driver.back()                            # cursor → A, 显示 page-a
driver.back()                            # ⚠️ 到顶了!不会报错,静默 no-op
print(driver.current_url)                # → 还是 page-a

driver.forward()                         # cursor → B
driver.forward()                         # cursor → C
driver.forward()                         # ⚠️ 到底了!也不会报错

# ===== refresh() =====
driver.refresh()
# 等价于:在当前页重新发送一次请求(浏览器的 F5)
# ⚠️ 不等价于 driver.get(driver.current_url)
#    refresh() 会带上 cache-control / 表单重提交提示
#    get() 就是一次全新的导航

# ===== get() 会截断 forward 队列 =====
driver.back()                            # cursor → B
driver.get("https://www.page-d.com")     # stack 变成 [A, B, D] ← C 被砍掉!
# 此时再 forward() 不会回到 C 了 —— 它已经被 purge 掉

driver.quit()

📝 作业要求

  1. 写脚本:连续 get(A) → get(B) → get(C) 三次,然后依次 back()、back()、forward(),每步 print(driver.current_url) 验证位置
    (A、B、C 是 3 个不同的网址,例如:https://www.baidu.com/、https://www.deepseek.com/、https://www.doubao.com/chat/
  2. 刷新当前页面 driver.refresh() 和重新 driver.get(driver.current_url) 有区别吗?用浏览器开发者工具看 Network 面板
  3. 打开新标签后 back() 能不能回到上一个标签的历史?为什么?
💡 提示:每个标签页有独立的 history stack —— 跨标签 back 是不可能的

关于我们

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. 如涉及版权问题或内容建议,请及时通过联系方式与我们沟通,我们将第一时间处理。