使用 site_prism 获取选定选项文本的正确方法是什么?
What is the correct way to get selected option text using site_prism?
我有一个指向 select 框的 site_prism 元素。像这样:
class MyPageObject < SitePrism::Page
element :my_select_box, '#select-box-id'
end
虽然我有办法获得 selected 选项值,但是:
my_page_object.my_select_box.value
我找不到获取 selected 选项文本的好方法。我发现的唯一解决方法是:
my_page_object.my_select_box.find("option[selected]").text
SitePrism API 有更好的方法吗?因为上面的解决方法混合使用了 SitePrism 和水豚 API,这对我来说似乎不太理想。
我从来没有这样做过,但一种方法可能是将 :my_select_box 定义为一个部分,然后在该部分下访问 selected 元素
class SelectSection < SitePrism::Section
element :selected, 'option[selected]'
end
class MyPageObject < SitePrism::Page
section :my_select_box, SelectSection, '#select-box-id'
end
应该可以让您访问
my_page_object.my_select_box.selected.text
然而,一个很好的问题是您为什么要访问文本 - 如果是因为您想根据已知文本验证 selected 项目的文本,您最好实际声明该元素作为 select 使用 Capybaras selectors 这样你就可以使用内置的查找器选项
class MyPageObject < SitePrism::Page
element :my_select_box, :select, 'select-box-id' # since it's now using Capybaras :select selector it's no longer a css selector so no # in front
end
然后应该让你做
expect(my_page_object).to have_my_select_box(selected: 'the text expected to be selected')
我有一个指向 select 框的 site_prism 元素。像这样:
class MyPageObject < SitePrism::Page
element :my_select_box, '#select-box-id'
end
虽然我有办法获得 selected 选项值,但是:
my_page_object.my_select_box.value
我找不到获取 selected 选项文本的好方法。我发现的唯一解决方法是:
my_page_object.my_select_box.find("option[selected]").text
SitePrism API 有更好的方法吗?因为上面的解决方法混合使用了 SitePrism 和水豚 API,这对我来说似乎不太理想。
我从来没有这样做过,但一种方法可能是将 :my_select_box 定义为一个部分,然后在该部分下访问 selected 元素
class SelectSection < SitePrism::Section
element :selected, 'option[selected]'
end
class MyPageObject < SitePrism::Page
section :my_select_box, SelectSection, '#select-box-id'
end
应该可以让您访问
my_page_object.my_select_box.selected.text
然而,一个很好的问题是您为什么要访问文本 - 如果是因为您想根据已知文本验证 selected 项目的文本,您最好实际声明该元素作为 select 使用 Capybaras selectors 这样你就可以使用内置的查找器选项
class MyPageObject < SitePrism::Page
element :my_select_box, :select, 'select-box-id' # since it's now using Capybaras :select selector it's no longer a css selector so no # in front
end
然后应该让你做
expect(my_page_object).to have_my_select_box(selected: 'the text expected to be selected')