键盘操作综合练习

send_keys / ActionChains 均可 — 单键 TAB · ESC · 其他单键 · 组合键 Ctrl 复制粘贴 · 富文本 · 三键 · 综合,共 6 题

练习说明

单键操作 组合键操作

单键操作

📋 练习要求 · 单键操作(TAB / ESC / 其他常用单键)
概念单键是 send_keys 最基础用法,用 Keys 常量发送单个功能键:TAB / ESCAPE / BACKSPACE / DELETE / HOME / END / ENTER / ARROW_* 等;WebElement.send_keys 自动聚焦,ActionChains 需先 click()
Selenium APIelement.send_keys(Keys.XXX) 或 ActionChains(driver).send_keys(Keys.XXX).perform()
练习要点
  • WebElement.send_keys() 自动聚焦,ActionChains.send_keys() 需先 click() 聚焦
  • Keys.TAB 按 HTML taborder 跳到下一个可聚焦元素,不受页面 CSS 影响
  • Keys.ESCAPE 常用于关闭弹窗、下拉、浮窗、模态框
  • Keys.BACKSPACE 删除光标前字符,Keys.DELETE 删除光标后字符
  • Keys.HOME / Keys.END 跳到行首/行尾,Keys.ENTER 提交或换行
# 快速参考 · TAB 焦点切换
from selenium.webdriver.common.keys import Keys
field1 = driver.find_element(By.CSS_SELECTOR, ".tab-field[data-idx='1'] input")
field1.click()
for _ in range(3):
    field1.send_keys(Keys.TAB)

# 快速参考 · ESC 关闭浮窗
search = driver.find_element(By.ID, "kb_search_esc")
search.click()
search.send_keys(Keys.ESCAPE)

# 快速参考 · 其他常用单键(BACKSPACE/DELETE/HOME/END/ENTER)
inp = driver.find_element(By.ID, "multi_key_input")
inp.click()
inp.send_keys(Keys.HOME)             # 光标到行首
inp.send_keys(Keys.ARROW_RIGHT)      # 右移一格
inp.send_keys(Keys.BACKSPACE)        # 删除光标前字符
inp.send_keys(Keys.END)              # 光标到行尾
inp.send_keys(Keys.DELETE)           # 删除光标后字符
inp.send_keys(Keys.ENTER)            # 换行/提交
📋 本节练习清单
  • ✅ 练习目标 1:Keys.TAB — 定位「姓名」字段 → click() 聚焦 → 连续 send_keys(Keys.TAB) 三次 → 断言焦点落到「邮箱」
  • ✅ 练习目标 2:Keys.ESC — 聚焦搜索框触发浮窗 → Keys.ESCAPE → 断言浮窗不可见
  • ✅ 练习目标 3:其他单键 — 输入框中依次发送 HOME / ARROW_RIGHT / BACKSPACE / END / DELETE / ENTER → 断言光标位置与文本变化
1 练习目标:Keys.TAB 连续切换焦点(连按 3 次 → 落到第 4 个字段)

操作步骤:
① 定位「姓名」输入框 → click() 聚焦;
② 连续发送 Keys.TAB 三次;
③ 断言焦点结果区的「当前焦点」文本包含「邮箱」。

Tab 焦点切换区(依次按 Tab 观察焦点)
当前焦点:未聚焦
查看参考答案
# 练习 1 · Keys.TAB 连续切换焦点
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

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

# 1. 聚焦第 1 个字段
field1 = driver.find_element(By.CSS_SELECTOR, ".tab-field[data-idx='1'] input")
field1.click()

# 2. 连按 3 次 TAB(写法 A:WebElement)
for _ in range(3):
    field1.send_keys(Keys.TAB)

# 写法 B:ActionChains(需先 click 聚焦)
from selenium.webdriver.common.action_chains import ActionChains
for _ in range(3):
    ActionChains(driver).send_keys(Keys.TAB).perform()

# 3. 断言焦点在邮箱
focus_text = driver.find_element(By.ID, "focus_name").text
assert "邮箱" in focus_text

# 关闭浏览器
driver.quit()
2 练习目标:Keys.ESC 关闭搜索候选浮窗

操作步骤:
① 定位 #kb_search_esc → click() 触发候选浮窗出现;
② 等待候选浮窗 #kb_search_esc_dd 可见;
③ 发送 Keys.ESCAPE → 断言浮窗不可见。

搜索框(聚焦弹出候选 · ESC 关闭)
等待搜索框聚焦...
查看参考答案
# 练习 2 · Keys.ESC 关闭浮窗
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

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

search = driver.find_element(By.ID, "kb_search_esc")
dd_locator = (By.ID, "kb_search_esc_dd")
wait = WebDriverWait(driver, 5)

# 1. 聚焦 → 候选出现
search.click()
wait.until(EC.visibility_of_element_located(dd_locator))

# 2. ESC 关闭
search.send_keys(Keys.ESCAPE)

# 3. 断言消失
wait.until(EC.invisibility_of_element_located(dd_locator))

# 关闭浏览器
driver.quit()
3 练习目标:其他常用单键(HOME / END / BACKSPACE / DELETE / ENTER / ARROW)

操作步骤:
① 定位 #multi_key_input → click() 聚焦;
② 依次发送:Keys.HOME(行首)→ Keys.ARROW_RIGHT(右移)→ Keys.BACKSPACE(删前)→ Keys.END(行尾)→ Keys.DELETE(删后)→ Keys.ENTER(换行);
③ 断言文本内容发生变化且光标位置正确。

多单键练习区(按不同单键观察文本与光标变化)
光标位置:0 / 选中文本长度:0
⌨️ 按键日志:等待按键...
查看参考答案
# 练习 3 · 其他常用单键
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

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

inp = driver.find_element(By.ID, "multi_key_input")
inp.click()
original = inp.get_attribute("value")

# 1. HOME → 行首
inp.send_keys(Keys.HOME)
assert inp.get_attribute("selectionStart") == "0"

# 2. ARROW_RIGHT → 右移一格
inp.send_keys(Keys.ARROW_RIGHT)
assert inp.get_attribute("selectionStart") == "1"

# 3. BACKSPACE → 删除光标前字符
inp.send_keys(Keys.BACKSPACE)
assert inp.get_attribute("value") == original[1:]

# 4. END → 行尾
inp.send_keys(Keys.END)
assert inp.get_attribute("selectionStart") == str(len(inp.get_attribute("value")))

# 5. DELETE → 删除光标后字符(行尾无字符可删)
# 6. ENTER → 换行
inp.send_keys(Keys.ENTER)
assert "\n" in inp.get_attribute("value")

# 关闭浏览器
driver.quit()

组合键操作

📋 练习要求 · 组合键操作(双键 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)配合完成表单填充与复制粘贴流程
4 练习目标:Ctrl+A/C/V/Z 全选复制粘贴撤销(两种写法都能)

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

源文本框
目标文本框
📋 操作日志:等待键盘操作...
查看参考答案
# 练习 4 · 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()
5 练习目标:富文本 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 重做刚才的撤销。
等待键盘操作...
查看参考答案
# 练习 5 · 富文本 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()
6 练习目标:综合练习 — 单键(TAB/HOME/ENTER)+ 组合键(Ctrl+A/C/V/Z)配合完成表单流程

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

综合练习区(单键 + 组合键配合)
🔄 流程日志:等待操作...
查看参考答案
# 练习 6 · 综合练习(单键 + 组合键)
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. 如涉及版权问题或内容建议,请及时通过联系方式与我们沟通,我们将第一时间处理。