AJAX 使用 Cucumber/Capybara/Selenium 触发自动完成结果

AJAX trigger autocomplete results with Cucumber/Capybara/Selenium

当我 运行 我的测试时,我无法显示自动完成下拉菜单,除非我实际单击搜索输入字段。

这是一个使用 Selenium Webdriver 的 Cucumber 测试,结果来自 Crafty Clicks Address Autocomplete API。

我已经尝试了来自其他几个 posts/sources 的相同解决方案的多个版本,所有这些看起来都像这样:

def fill_in_autocomplete(selector, value)
  page.execute_script("
    window.onload = function() {
      $('#{selector}').focus().val('#{value}').keydown();
    }
  ")
end

fill_in_autocomplete "#address_lookup", with: "EC2A 1AF"

我还尝试了更具体的基于按键的解决方案,例如:

var e = jQuery.Event("keydown");
e.which = 50;
$("input").trigger(e);

我也暂停了测试并在控制台中手动测试了每个解决方案,但再次 none 工作。

值得注意的是我没有使用 jQuery UI 所以没有 .autocomplete() 解决方案是相关的。

我还在整个过程中使用了 sleep 来解决时间上的任何问题。

我没主意了!

原来这是一些较新版本的 Firefox 的问题。起初有人建议我降级 FF,但我选择改用 chromedriver(我使用 chromedriver-helper gem)并且一切正常。

有趣的旁注,我花了这么长时间才弄明白的原因之一是因为我试图触发 Chrome 控制台中输入字段的焦点,以此来弄清楚我需要在测试中使用什么代码。这样做的问题是,显然当您在 Chrome 中打开控制台时,您无法将焦点从控制台上移开!因此,无论我尝试使用什么方法来关注控制台的输入字段,都被焦点在控制台本身的事实所覆盖。最后,我通过将焦点代码放在单击事件中并将其附加到页面上的元素来绕过它。然后我关闭控制台,单击该元素并将焦点转移到自动完成输入字段。