Capybara/Poltergeist 无法从 jQuery 自动完成字段中 select

Capybara/Poltergeist can't select from a jQuery autocomplete field

我在使用 Capybara 从自动完成字段中进行选择时遇到问题。

我有下一个代码:

def choose_autocomplete_result(text, input_id="input[data-autocomplete]")
  page.execute_script %Q{ $('#{input_id}').trigger("focus") }
  page.execute_script %Q{ $('#{input_id}').trigger("keydown") }
  sleep 1
  page.execute_script %Q{ $('.ui-menu-item a:contains("#{text}")').trigger("mouseenter").trigger("click"); }
end

我还有下一个测试:

scenario 'Check autocomplete', js: true do
  find('.prop_address').native.send_keys 'lond'
  choose_autocomplete_result 'London', '.commercial_property_addresses_attributes_0_address'
  expect(page).to have_text('Some text')
end

错误是:

Failure/Error: find('#output').find('div').trigger('click')

     Capybara::ElementNotFound:
       Unable to find css "#output"

我也尝试了下一个测试:

scenario 'Check autocomplete', js: true do
  fill_autocomplete('.prop_address', with: 'lond', select: 'London')
  expect(page).to have_text('Some text')
end

使用下一个方法:

def fill_autocomplete(css_id, options = {})
  find("#{css_id}").native.send_keys options[:with]
  page.execute_script %{ $('#{css_id}').trigger('focus') }
  page.execute_script %{ $('#{css_id}').trigger('keydown') }
  selector = %{ul.ui-autocomplete li.ui-menu-item:contains("#{options[:select]}")}
  expect(page).to have_selector('ul.ui-autocomplete li.ui-menu-item')
  page.execute_script %{ $('#{selector}').trigger('mouseenter').click() }
end

这样错误是:

Failure/Error: expect(page).to have_selector('ul.ui-autocomplete li.ui-menu-item')
       expected to find css "ul.ui-autocomplete li.ui-menu-item" but there were no matches

在这两种变体中,表格都填写了 'lond',但没有一个可用变体未被选中。

谢谢!

我不确定你想用所有 execute_script 东西完成什么。假设您使用的是 jQueryUI autocomplete,所需要的只是将键发送到文本输入,然后单击显示的选项。所以你的方法应该是

def fill_autocomplete(css_selector, options = {})
  find(css_selector).send_keys options[:with]   # No .native. needed
  find("ul.ui-autocomplete li.ui-menu-item", text: options[:select]).click()
end

这里有一个要点,您可以 运行 展示它的工作原理 - https://gist.github.com/twalpole/a12aeef278c9c714b9e078ce2adfda99