You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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事件触发,彻底规避键盘模拟的兼容性问题。

若必须使用键盘操作的替代方案

如果因特殊场景需要保留键盘模拟逻辑,可尝试以下调整:

  1. 显式聚焦目标元素
    点击下拉框后,确保元素获得焦点再发送按键命令:

    $browser->visit('/index')
        ->assertSee('secret phrase')
        ->click('#selector')
        ->pause(500)
        ->focus('#selector')
        ->keys('#selector', [
            WebDriverKeys::DOWN,
            WebDriverKeys::DOWN,
            WebDriverKeys::ENTER,
        ]);
    
  2. 延长等待时长
    增大暂停时间,确保下拉框完全渲染展开后再执行按键操作:

    $browser->visit('/index')
        ->assertSee('secret phrase')
        ->click('#selector')
        ->pause(1500)
        ->keys('#selector', [
            WebDriverKeys::DOWN,
            WebDriverKeys::DOWN,
            WebDriverKeys::ENTER,
        ]);
    
  3. 直接通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:03:17