Laravel Dusk的keys()方法失效(如ARROW_DOWN、ENTER等)
Laravel Dusk keys() 方法对
<select> 元素无效的解决方案 优先使用 Dusk 内置的 select() 方法
Laravel Dusk 专门提供了处理下拉选择框的select()方法,这比手动模拟键盘操作更可靠,也更符合框架设计逻辑:
按选项值选择
$browser->visit('/index') ->assertSee('secret phrase') ->select('#selector', 'second-option-value');
按选项索引选择(索引从0开始,第二个选项对应索引1)
$browser->visit('/index') ->assertSee('secret phrase') ->select('#selector', 1);
该方法会自动处理下拉框展开、选项选中及change事件触发,彻底规避键盘模拟的兼容性问题。
若必须使用键盘操作的替代方案
如果因特殊场景需要保留键盘模拟逻辑,可尝试以下调整:
显式聚焦目标元素
点击下拉框后,确保元素获得焦点再发送按键命令:$browser->visit('/index') ->assertSee('secret phrase') ->click('#selector') ->pause(500) ->focus('#selector') ->keys('#selector', [ WebDriverKeys::DOWN, WebDriverKeys::DOWN, WebDriverKeys::ENTER, ]);延长等待时长
增大暂停时间,确保下拉框完全渲染展开后再执行按键操作:$browser->visit('/index') ->assertSee('secret phrase') ->click('#selector') ->pause(1500) ->keys('#selector', [ WebDriverKeys::DOWN, WebDriverKeys::DOWN, WebDriverKeys::ENTER, ]);直接通过JS操作DOM
绕过浏览器自动化的键盘事件限制,直接用JavaScript设置选中状态并触发事件:$browser->visit('/index') ->assertSee('secret phrase') ->executeScript("document.getElementById('selector').selectedIndex = 1;") ->executeScript("document.getElementById('selector').dispatchEvent(new Event('change', { bubbles: true }));");
环境兼容性排查
- 严格匹配Chrome与Chromedriver版本:即使主版本一致,小版本号也必须完全相同。重新下载与你的Chrome(129.0.6668.58)完全匹配的Chromedriver替换现有文件。
- 禁用Chrome自动更新:避免浏览器版本自动升级导致与Chromedriver兼容性断裂。
内容的提问来源于stack exchange,提问作者Torsten Schmitz
相关产品推荐
相关产品推荐

