send_keys / ActionChains 均可 — TAB 焦点切换 · ESC 关闭浮窗 · 其他常用单键,共 3 题
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()