Django Channels测试中Selenium的Keys.ENTER无法触发问题求助
Django Channels Selenium测试中ENTER按键未触发的解决方法
关于USB错误日志
那个USB设备错误是ChromeDriver在Windows上的常见警告,和你的ENTER按键问题无关,无需理会。
解决ENTER按键未触发的可行方案
直接定位输入框元素发送按键(推荐)
ActionChains的全局send_keys依赖当前焦点元素,可能焦点未正确落在输入框上。改为直接定位输入框,调用元素自身的send_keys方法:from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys def _post_message(self, message): # 替换为你的输入框定位方式(ID/CSS选择器等) input_box = self.driver.find_element(By.ID, "message-input") input_box.send_keys(message + Keys.ENTER)给ActionChains添加延迟
有时候Selenium操作速度过快,前端事件未及时响应,添加短暂延迟模拟真实操作节奏:from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys def _post_message(self, message): action = ActionChains(self.driver) action.send_keys(message) action.pause(0.3) # 添加0.3秒延迟 action.send_keys(Keys.ENTER) action.perform()用JavaScript触发回车事件
如果上述方法都无效,直接通过JavaScript模拟键盘回车事件,绕过Selenium的模拟限制:from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys def _post_message(self, message): input_box = self.driver.find_element(By.ID, "message-input") # 替换选择器 input_box.send_keys(message) # 模拟完整的回车按键事件 self.driver.execute_script(""" const element = arguments[0]; // 触发keydown事件 const keydownEvent = new KeyboardEvent('keydown', { key: 'Enter', keyCode: 13, which: 13, bubbles: true }); element.dispatchEvent(keydownEvent); // 触发keyup事件 const keyupEvent = new KeyboardEvent('keyup', { key: 'Enter', keyCode: 13, which: 13, bubbles: true }); element.dispatchEvent(keyupEvent); """, input_box)检查前端事件绑定
确认前端是否监听的是keydown/keyup/keypress事件,部分场景下可能只监听了特定事件(比如keydown),但手动操作正常的话这种概率较低。
内容的提问来源于stack exchange,提问作者Rihhard
相关产品推荐
相关产品推荐

