我正在尝试使用Capybara(2.1.0)从下拉菜单中选择一个项目.
我想按编号选择(意思是选择第二个,第三个等选项).
我用Google搜索疯狂尝试各种各样的东西,但没有运气.
我可以通过使用值来选择它:
find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
Run Code Online (Sandbox Code Playgroud)
但我不想使用那种方法b/c值会改变,这将使我的测试变得脆弱.
下拉列表的HTML是:
<td class="value">
<select name="organizationSelect" id="organizationSelect" class="required">
<option value="NULL">Choose...</option>
<option value="4c430d62-f1ba-474f-8e8a-4452c55ea0a8"> Institution1</option>
<option value="e1a4efa7-352d-410a-957e-35c8a3b92944"> Institution / test</option>
</select>
</td>
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text
select(option, :from => organizationSelect)
Run Code Online (Sandbox Code Playgroud)
但它会导致此错误:
Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)
Run Code Online (Sandbox Code Playgroud)
那么如何从下拉列表中选择第一个,第二个,第三个等选项(使用Capybara)?
我正在开发一个使用Select2(版本3.5.1)的应用程序.设置此下拉/自动填充字段的HTML如下所示:
<input id="mySelect" class="form-control" type="hidden">
Run Code Online (Sandbox Code Playgroud)
form-control这个片段中的类来自Bootstrap.我正在使用以下代码从JavaScript初始化此字段:
function getItemFormat(item) {
var format = '<div>' + item.ItemName + '</div>';
return format;
}
$(function() {
$('#mySelect').select2({
minimumInputLength: 5,
placeholder: 'Search for an item',
allowClear: true,
ajax: {
url: '/api/getItems',
dataType: 'json',
quietMillis: 250,
data: function (term, page) {
return {
query: term
};
},
results: function (data, page) {
return { results: data, id: 'ItemId', text: 'ItemText' };
}
},
formatResult: getItemFormat,
dropdownCssClass: "bigdrop",
escapeMarkup: function (m) { return m; }
}); …Run Code Online (Sandbox Code Playgroud) 我在页面上有一个Select2元素,通过ajax加载结果.希望能与水豚/ rspec的测试这个(使用捉弄人的鬼司机),但是由于选择二元素实际上开始作为一个隐藏字段,然后填充一个<ul>一旦结果进行处理,没有一个正常的select,fill_in或者choose助手会工作.
我现在拥有的是什么
it "should have a search field for events" do
click_link "Select an Event" # this works as expected
within('.select2-container') do # works
find('.select2-search input').set(event.description[0,5]) # won't work!
find(:xpath, "li[text()='#{event.description}']").click
end
click_button "Search"
page.should have_content("Displaying all 2 photos")
end
Run Code Online (Sandbox Code Playgroud)
上面的第4行,显然capybara可以找到元素,但值不会改变,Select2永远不会进行ajax调用.(不能fill_in在那里使用普通因为搜索字段元素没有label,id或name属性)