无法在水豚中使用 select 选项
Cannot select option in capybara
我在 select 从下拉列表中选择选项时遇到问题。
HTML是这样的:
<div unselectable="on" class="k-widget k-multiselect k-header" style="" title="">
<div unselectable="on" class="k-multiselect-wrap k-floatwrap">
<ul class="k-reset" unselectable="on" role="listbox"></ul>
<input style="width: 25px" class="k-input k-readonly" accesskey="" autocomplete="off" role="listbox" aria-expanded="false" tabindex="0" aria-owns="" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-activedescendant="28dfc7ec-69a2-4a95-ba29-1f94e899c7e3">
<span class="k-icon k-loading k-loading-hidden"></span>
</div>
<div data-bind="source: getTreeValues, value: selectedCrmAttributes.DYN_" data-text-field="name_i18n" data-value-field="attributeId" data-value-primitive="false" data-auto-bind="true" data-role="interestselect" multiple="multiple" style="display: none;" aria-disabled="false" aria-readonly="false">
<option value="DYN_#76ed2b3f-4d64-4d07-8ba7-ab6f133e0c70">one.csv</option>
<option value="DYN_#6f914af1-ba58-4c40-99fe-e874bdf9c47b">two.csv</option>
<option value="DYN_#4cd908d0-6c61-4a15-84e7-f113aa7a8ed4">three.csv</option>
<option value="DYN_#c137cfad-81af-4164-90b1-a518a7595baa">four.csv</option>
</div>
<span style="font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; font-stretch: normal; font-style: normal; font-weight: 300; letter-spacing: normal; text-transform: none; line-height: 17.0333px; position: absolute; visibility: hidden; top: -3333px; left: -3333px;"></span>
</div>
我试过select这个选项
And(/^selecting (.*) from (.*)$/) do |item, selection|
find('.dgr-dimensions-row', :text=>selection).find('.k-widget.k-multiselect.k-header').click
#expect(page).to have_content(item) -> returns true
select(item)
end
项目是我想要 select 的选项,selection 是我想要 select 项目的过滤器。
示例:如果我有一个过滤器文件并且选项是一、二、三、四。
然后 selection 是 File 并且项目是 one 例如。
我正在使用
cucumber 2.1.0
ruby 2.1.6
nokogiri 1.6.6.2
capybara 2.4.4
selenium-webdriver 2.47.1
提前致谢!
已编辑
我想 select 文本选项,ruby 步骤可以重复使用。我有很多类似的字段,如果我可以重复使用相同的步骤,那将会很有用。
图片:
已编辑 2
<ul unselectable="on" class="k-list k-reset" tabindex="-1" aria-hidden="true" aria-live="polite" data-role="staticlist" role="listbox" style="overflow: auto; height: auto;">
<li tabindex="-1" role="option" unselectable="on" class="k-item k-state-focused" data-offset-index="0" id="96c13cd6-8365-4e73-a134-6395988822f7">one.csv</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="1">two.csv</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="2">three.csv</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="3">four.csv</li>
</ul>
Capybaras #select 仅适用于可见的 html 选项元素。这里的问题是您似乎正在使用隐藏真实选项元素的 kendo multiselect 小部件(顺便说一句,您的 html 无效,因为选项元素仅在法律上允许位于select、optgroup 或 datalist 元素),然后使用 ul.k-list 中的 li 元素生成可见的 UI。通过查看 kendo multiselect - http://demos.telerik.com/kendo-ui/multiselect/index 的演示 - 看起来实际的 ul.k-list 元素附加到小部件 [=23= 之外的页面] 因此,查找不能限定在小部件的范围内,并且 ul.list 的 ID 为“#{id of select hidden in multiselect widget}_list”。由于您的 html 在小部件的隐藏元素上似乎没有 id ,因此也无法确定范围。因为所有这些,而不是做 select(item)
你应该能够使用
find('.k-list li.k-item', text: item).click
单击 header 后下拉列表中变为可见的元素。如果这个发现可以限定在页面上的特定 .klist 范围内会更好,但希望在您 运行 测试时只有一个实际可见。
我在 select 从下拉列表中选择选项时遇到问题。
HTML是这样的:
<div unselectable="on" class="k-widget k-multiselect k-header" style="" title="">
<div unselectable="on" class="k-multiselect-wrap k-floatwrap">
<ul class="k-reset" unselectable="on" role="listbox"></ul>
<input style="width: 25px" class="k-input k-readonly" accesskey="" autocomplete="off" role="listbox" aria-expanded="false" tabindex="0" aria-owns="" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-activedescendant="28dfc7ec-69a2-4a95-ba29-1f94e899c7e3">
<span class="k-icon k-loading k-loading-hidden"></span>
</div>
<div data-bind="source: getTreeValues, value: selectedCrmAttributes.DYN_" data-text-field="name_i18n" data-value-field="attributeId" data-value-primitive="false" data-auto-bind="true" data-role="interestselect" multiple="multiple" style="display: none;" aria-disabled="false" aria-readonly="false">
<option value="DYN_#76ed2b3f-4d64-4d07-8ba7-ab6f133e0c70">one.csv</option>
<option value="DYN_#6f914af1-ba58-4c40-99fe-e874bdf9c47b">two.csv</option>
<option value="DYN_#4cd908d0-6c61-4a15-84e7-f113aa7a8ed4">three.csv</option>
<option value="DYN_#c137cfad-81af-4164-90b1-a518a7595baa">four.csv</option>
</div>
<span style="font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; font-stretch: normal; font-style: normal; font-weight: 300; letter-spacing: normal; text-transform: none; line-height: 17.0333px; position: absolute; visibility: hidden; top: -3333px; left: -3333px;"></span>
</div>
我试过select这个选项
And(/^selecting (.*) from (.*)$/) do |item, selection|
find('.dgr-dimensions-row', :text=>selection).find('.k-widget.k-multiselect.k-header').click
#expect(page).to have_content(item) -> returns true
select(item)
end
项目是我想要 select 的选项,selection 是我想要 select 项目的过滤器。
示例:如果我有一个过滤器文件并且选项是一、二、三、四。 然后 selection 是 File 并且项目是 one 例如。
我正在使用
cucumber 2.1.0
ruby 2.1.6
nokogiri 1.6.6.2
capybara 2.4.4
selenium-webdriver 2.47.1
提前致谢!
已编辑
我想 select 文本选项,ruby 步骤可以重复使用。我有很多类似的字段,如果我可以重复使用相同的步骤,那将会很有用。
图片:
已编辑 2
<ul unselectable="on" class="k-list k-reset" tabindex="-1" aria-hidden="true" aria-live="polite" data-role="staticlist" role="listbox" style="overflow: auto; height: auto;">
<li tabindex="-1" role="option" unselectable="on" class="k-item k-state-focused" data-offset-index="0" id="96c13cd6-8365-4e73-a134-6395988822f7">one.csv</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="1">two.csv</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="2">three.csv</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="3">four.csv</li>
</ul>
Capybaras #select 仅适用于可见的 html 选项元素。这里的问题是您似乎正在使用隐藏真实选项元素的 kendo multiselect 小部件(顺便说一句,您的 html 无效,因为选项元素仅在法律上允许位于select、optgroup 或 datalist 元素),然后使用 ul.k-list 中的 li 元素生成可见的 UI。通过查看 kendo multiselect - http://demos.telerik.com/kendo-ui/multiselect/index 的演示 - 看起来实际的 ul.k-list 元素附加到小部件 [=23= 之外的页面] 因此,查找不能限定在小部件的范围内,并且 ul.list 的 ID 为“#{id of select hidden in multiselect widget}_list”。由于您的 html 在小部件的隐藏元素上似乎没有 id ,因此也无法确定范围。因为所有这些,而不是做 select(item)
你应该能够使用
find('.k-list li.k-item', text: item).click
单击 header 后下拉列表中变为可见的元素。如果这个发现可以限定在页面上的特定 .klist 范围内会更好,但希望在您 运行 测试时只有一个实际可见。