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
我在使用 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