浏览器操作作业 · 窗口控制

窗口大小 / 位置 / 全屏控制等操作

首页 浏览器操作导航

页面导读 · 窗口控制

maximize/minimize/fullscreen/set_window_size/set_window_rect 完整控制

学习目标
能精确控制浏览器窗口尺寸和坐标,理解 fullscreen 与 maximize 的区别
核心 API
maximize_window() · minimize_window() · fullscreen_window() · set_window_size() · set_window_position() · set_window_rect() · get_window_rect()
作业数量
4 题基础 · +1 进阶可选
难度:⭐⭐⭐ 中等
⚠️ 前置注意: fullscreen 隐藏地址栏(F11 效果),maximize 保留;set_window_rect 是 Selenium 4 原子方法,比 size+position 分两次调更流畅
参数配置 打开关闭 页面导航 窗口控制 页面信息 元素交互 Cookie操作 截图保存 超时等待

操作 4:窗口尺寸与位置

maximize_window 最大化 · minimize_window 最小化 · set_window_size / set_window_position / set_window_rect 精确控制。

size + position vs set_window_rect —— 先看 Selenium 源码
set_window_size(w,h) + set_window_position(x,y) 是两个独立动作,可能被浏览器事件循环插队 → 窗口先闪到新尺寸,再跳到新位置
set_window_rect(x,y,w,h) 是原子操作,驱动一次性更新 x/y/w/h,位置和尺寸同时生效 ✅
💡 读操作也有 3 套:get_window_size() / get_window_position() / get_window_rect(),Selenium 4 推荐统一用 rect

练习目标:点击按钮观察下方模拟浏览器窗口的实时变化

macOS Demo 文件 编辑 视图 窗口 帮助 9:41
窗口左上角坐标:(0, 0) 屏幕 (1920×1080)
Selenium 练习页
https://www.example.com
1600 × 900
位置 (160, 90)
"""
窗口控制完整示例
- maximize/minimize 直接调 driver 方法
- size/position/rect 需要 Options 或 driver 方法
"""
from selenium import webdriver

driver = webdriver.Chrome()

# ===== 方式 1:快捷方法 =====
driver.maximize_window()               # 一键最大化到屏幕
driver.minimize_window()               # 最小化到任务栏(Selenium 4)
driver.fullscreen_window()             # 全屏(F11 效果,Chrome 支持)

# ===== 方式 2:精确控制 =====
driver.set_window_size(1200, 800)      # 宽 × 高
driver.set_window_position(100, 100)   # 左上角 x, y
# ⚠️ 上面两次调用 → 可能有闪烁(独立动作)

# ===== 方式 3:set_window_rect(推荐 Selenium 4 用法)=====
driver.set_window_rect(x=900, y=300, width=600, height=500)
# 原子操作!位置和尺寸同时生效,无闪烁

# ===== 读取当前窗口信息 =====
size = driver.get_window_size()        # {'width': 1920, 'height': 1080}
pos  = driver.get_window_position()    # {'x': 0, 'y': 0}
rect = driver.get_window_rect()        # {'x': 0, 'y': 0, 'width': 1920, 'height': 1080}
# 💡 Selenium 4 推荐统一用 get_window_rect(),包含所有字段

# ===== 居中窗口实战 =====
screen_w = driver.execute_script("return window.screen.width")
screen_h = driver.execute_script("return window.screen.height")
win_w, win_h = 1200, 800
x = (screen_w - win_w) // 2
y = (screen_h - win_h) // 2
driver.set_window_rect(x, y, win_w, win_h)

driver.quit()

📝 作业要求

  1. 写脚本:打开浏览器 → maximize_window() → 读取当前窗口尺寸 → set_window_size(800,600) → 验证尺寸是否真变了(误差不超过 ±5 px)
  2. 实现"居中窗口":先拿屏幕分辨率(driver.execute_script("return screen.width + ',' + screen.height")),再用 set_window_rect 把窗口挪到屏幕正中央
  3. 同一个目标:把窗口改成 600×500 放在 (100,100)。分别用 size + position 两次调用 和 set_window_rect 一次调用 —— 观察肉眼是否有闪烁差异
  4. 全屏 vs 最大化:fullscreen_window() 和 maximize_window() 看起来都把窗口拉满屏幕,但实际像素不一样!写脚本:先 maximize → 读 rect → fullscreen → 再读 rect,对比两次的 width / height 差值。哪个更大?fullscreen 会把地址栏、标签栏也藏起来(类似 F11),验证一下
  5. 进阶 · 可选 窗口状态保存 & 恢复:写脚本模拟用户操作轨迹 —— ① 启动浏览器默认尺寸 → ② 记录当前 rect(存成一个 dict) → ③ maximize → ④ 改 800×600 放到 (50,50) → ⑤ 再改 1200×700 → ⑥ 用 set_window_rect(**saved_rect) 把第 ② 步存的值恢复回去。最后 assert 一下恢复后的 rect 和第 ② 步几乎完全一致
💡 提示:set_window_rect 是 Selenium 4 主推的原子方法,面试经常问它为什么比 size + position 分开调更好。driver.get_window_rect() 返回的 dict 可直接 **dict 解包当参数传回去什么是 **dict 解包?

Python 里 **dict 会把 dict 的 key-value 展开成关键字参数。

get 返回:{'x':100,'y':50,'width':1280,'height':720}
set 需要:set_window_rect(x=100, y=50, width=1280, height=720)

💡 这两句完全等价:
set_window_rect(**saved)
set_window_rect(x=100, y=50, width=1280, height=720)

❌ 方式 A:手动写(容易漏 key)
saved = driver.get_window_rect()
driver.maximize_window()
driver.set_window_rect(
    x=saved['x'], y=saved['y'],
    width=saved['width'], height=saved['height']
)
✅ 方式 B:** 解包(一行搞定)
saved = driver.get_window_rect()
driver.maximize_window()
driver.set_window_rect(**saved)   # 一行!不会漏 key
💡 特别适合:finally 里恢复窗口——读了个 dict,写的时候直接扔回去。
,非常适合写"记住窗口位置再恢复"的场景

关于我们

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