键盘操作练习 · 组合键

send_keys / ActionChains 均可 — Ctrl 复制粘贴 · 富文本格式化 · 三键链式 · 综合(单键+组合键),共 3 题

首页 键盘操作导航

练习说明

单键 组合键

组合键操作

📋 练习要求 · 组合键操作(双键 Ctrl / 三键链式 / 综合)
概念双键组合键(Ctrl+A/B/C/V/Z/Y)两种 API 都能用;三键及以上必须用 ActionChains 显式 key_down → key_up;综合场景中常需单键(TAB/ENTER/HOME)与组合键配合完成流程
Selenium API双键 el.send_keys(Keys.CONTROL, "a") ;三键 ActionChains.key_down(CONTROL).key_down(SHIFT).send_keys("z").key_up(SHIFT).key_up(CONTROL).perform()
练习要点
  • 双键:element.send_keys(Keys.CONTROL, "a") 内部自动隐式 key_down/up,无需显式写
  • Ctrl+V 依赖系统剪贴板,不同浏览器/系统表现可能不同
  • 三键及以上:必须 ActionChains 显式 key_down → send_keys → key_up,顺序"先按的后松"
  • 三键 Ctrl+Shift+Z 写法:key_down(CONTROL) → key_down(SHIFT) → send_keys("z") → key_up(SHIFT) → key_up(CONTROL)
  • 综合场景:单键(TAB/ENTER/HOME/END)与组合键(Ctrl+A/C/V/Z)配合完成完整输入流程
  • macOS 用户将 Keys.CONTROL 替换为 Keys.COMMAND
# 快速参考 · 双键 Ctrl+A/C/V 复制粘贴
from selenium.webdriver.common.keys import Keys
import time
src = driver.find_element(By.ID, "clip_src")
dst = driver.find_element(By.ID, "clip_dst")
src.click()
src.send_keys(Keys.CONTROL, "a")   # 全选
src.send_keys(Keys.CONTROL, "c")   # 复制
time.sleep(0.3)
dst.click()
dst.send_keys(Keys.CONTROL, "v")   # 粘贴
assert dst.get_attribute("value") == src.get_attribute("value")

# 快速参考 · 三键 Ctrl+Shift+Z 链式
from selenium.webdriver.common.action_chains import ActionChains
edit = driver.find_element(By.ID, "editBox")
edit.click()
edit.send_keys(Keys.CONTROL, "b")          # 双键:隐式处理
ActionChains(driver) \
    .key_down(Keys.CONTROL) \
    .key_down(Keys.SHIFT) \
    .send_keys("z") \
    .key_up(Keys.SHIFT) \
    .key_up(Keys.CONTROL) \
    .perform()
📋 本节练习清单
  • ✅ 练习目标 1:Ctrl+A/C/V 复制粘贴 → 断言两框内容相同 → Ctrl+Z 撤销
  • ✅ 练习目标 2:Ctrl+B 加粗(双键隐式) + Ctrl+Shift+Z 三键重做(显式链式) + 断言工具栏高亮
  • ✅ 练习目标 3:综合练习 — 单键(TAB/HOME/ENTER)与组合键(Ctrl+A/C/V/Z)配合完成表单填充与复制粘贴流程
1 练习目标:Ctrl+A/C/V/Z 全选复制粘贴撤销(两种写法都能)

操作步骤:
① 聚焦 #clip_src:Ctrl+A 全选 → Ctrl+C 复制;
② 聚焦 #clip_dst:Ctrl+V 粘贴,断言两框内容相同;
③ 再 Ctrl+Z 撤销。

源文本框
目标文本框
📋 操作日志:等待键盘操作...
查看参考答案
# 练习 1 · Ctrl 组合键
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 启动浏览器并打开页面
driver = webdriver.Chrome()
driver.get("https://autotest-505.pages.dev/keyboard_op_practice.html")

src = driver.find_element(By.ID, "clip_src")
dst = driver.find_element(By.ID, "clip_dst")
dst.clear()

# 写法 A:element.send_keys(双键修饰键自动隐式 key_down/up)
src.click()
src.send_keys(Keys.CONTROL, "a")
src.send_keys(Keys.CONTROL, "c")
time.sleep(0.3)

dst.click()
dst.send_keys(Keys.CONTROL, "v")
time.sleep(0.3)
assert dst.get_attribute("value") == src.get_attribute("value")

dst.send_keys(Keys.CONTROL, "z")

# 写法 B:ActionChains 链式
from selenium.webdriver.common.action_chains import ActionChains
src.click()
ActionChains(driver).send_keys(Keys.CONTROL, "a").send_keys(Keys.CONTROL, "c").perform()

# 注:macOS 用 Keys.COMMAND 替换 Keys.CONTROL

# 关闭浏览器
driver.quit()
2 练习目标:富文本 Ctrl+B/I/U 格式化 + Ctrl+Shift+Z 三键链式

操作步骤:
① 聚焦 #editBox → 输入文字,选中一部分;
② Ctrl+B 加粗(浏览器触发 execCommand);
③ 发送三键 Ctrl+Shift+Z 重做(必须 ActionChains 显式 key_down/key_up)。

在这段文字里选中一部分,然后按 Ctrl+B 加粗、Ctrl+I 斜体、Ctrl+U 下划线。
也可以用三键 Ctrl+Shift+Z 重做刚才的撤销。
等待键盘操作...
查看参考答案
# 练习 2 · 富文本 Ctrl+B/I/U + Ctrl+Shift+Z 三键
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

# 启动浏览器并打开页面
driver = webdriver.Chrome()
driver.get("https://autotest-505.pages.dev/keyboard_op_practice.html")

edit = driver.find_element(By.ID, "editBox")

# 1. 输入文本
edit.click()
edit.clear()
edit.send_keys("自动化测试 Selenium 富文本练习")

# 2. 双键 Ctrl+B(两种写法都能)
edit.send_keys(Keys.CONTROL, "b")
ActionChains(driver).click(edit).send_keys(Keys.CONTROL, "b").perform()

# 3. 三键 Ctrl+Shift+Z(必须 ActionChains 显式 key_down/key_up)
# 物理键盘逻辑:先按的后松
ActionChains(driver) \
    .key_down(Keys.CONTROL) \
    .key_down(Keys.SHIFT) \
    .send_keys("z") \
    .key_up(Keys.SHIFT) \
    .key_up(Keys.CONTROL) \
    .perform()

# 4. 断言工具栏按钮高亮
bold_btn = driver.find_element(By.CSS_SELECTOR, ".edit-toolbar button[data-cmd='bold']")
assert "active" in bold_btn.get_attribute("class")

# 关闭浏览器
driver.quit()
3 练习目标:综合练习 — 单键(TAB/HOME/ENTER)+ 组合键(Ctrl+A/C/V/Z)配合完成表单流程

操作步骤:
① Keys.TAB 依次在「姓名→邮箱→备注」间切换并输入内容;
② 在备注框中 Ctrl+A 全选 → Ctrl+C 复制;
③ Keys.HOME 回到行首 → Ctrl+V 粘贴 → Keys.ENTER 换行;
④ Ctrl+Z 撤销,断言文本恢复。

综合练习区(单键 + 组合键配合)
🔄 流程日志:等待操作...
查看参考答案
# 练习 3 · 综合练习(单键 + 组合键)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 启动浏览器并打开页面
driver = webdriver.Chrome()
driver.get("https://autotest-505.pages.dev/keyboard_op_practice.html")

name = driver.find_element(By.ID, "combo_name")
email = driver.find_element(By.ID, "combo_email")
note = driver.find_element(By.ID, "combo_note")

# 1. 单键 TAB 切换 + 输入
name.click()
name.send_keys("张三")
name.send_keys(Keys.TAB)          # Tab 切到邮箱
email.send_keys("zhangsan@example.com")
email.send_keys(Keys.TAB)         # Tab 切到备注
note.send_keys("这是一段综合练习的备注文本")

# 2. 组合键 Ctrl+A 全选 + Ctrl+C 复制
note.send_keys(Keys.CONTROL, "a")
note.send_keys(Keys.CONTROL, "c")
time.sleep(0.3)

# 3. 单键 HOME 到行首 + 组合键 Ctrl+V 粘贴 + Enter 换行
note.send_keys(Keys.HOME)
note.send_keys(Keys.CONTROL, "v")
note.send_keys(Keys.ENTER)
time.sleep(0.3)

# 4. 组合键 Ctrl+Z 撤销
original = "这是一段综合练习的备注文本"
note.send_keys(Keys.CONTROL, "z")
time.sleep(0.3)
assert note.get_attribute("value") == original

# 关闭浏览器
driver.quit()

关于我们

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