send_keys / ActionChains 均可 — 单键 TAB · ESC · 其他单键 · 组合键 Ctrl 复制粘贴 · 富文本 · 三键 · 综合,共 6 题
element.send_keys(Keys.XXX) 或 ActionChains(driver).send_keys(Keys.XXX).perform()# 快速参考 · 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) # 换行/提交
操作步骤:
① 定位「姓名」输入框 → click() 聚焦;
② 连续发送 Keys.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()
操作步骤:
① 定位 #kb_search_esc → click() 触发候选浮窗出现;
② 等待候选浮窗 #kb_search_esc_dd 可见;
③ 发送 Keys.ESCAPE → 断言浮窗不可见。
# 练习 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()
操作步骤:
① 定位 #multi_key_input → click() 聚焦;
② 依次发送:Keys.HOME(行首)→ Keys.ARROW_RIGHT(右移)→ Keys.BACKSPACE(删前)→ Keys.END(行尾)→ Keys.DELETE(删后)→ Keys.ENTER(换行);
③ 断言文本内容发生变化且光标位置正确。
# 练习 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()
el.send_keys(Keys.CONTROL, "a") ;三键 ActionChains.key_down(CONTROL).key_down(SHIFT).send_keys("z").key_up(SHIFT).key_up(CONTROL).perform()# 快速参考 · 双键 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()
操作步骤:
① 聚焦 #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()
操作步骤:
① 聚焦 #editBox → 输入文字,选中一部分;
② Ctrl+B 加粗(浏览器触发 execCommand);
③ 发送三键 Ctrl+Shift+Z 重做(必须 ActionChains 显式 key_down/key_up)。
# 练习 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()
操作步骤:
① 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()