假设我有一个简单的页面,其ID少于我想要测试的ID
<div class="__panel_body">
<div class="__panel_header">Real Estate Rating</div>
<div class="__panel_body">
<div class="__panel_header">Property Rating Info</div>
<a class="icon.edit"></a>
<a class="icon.edit"></a>
</div>
<div class="__panel_body">
<div class="__panel_header">General Risks</div>
<a class="icon.edit"></a>
<a class="icon.edit"></a>
</div>
<div class="__panel_body">
<div class="__panel_header">Amenities</div>
<a class="icon.edit"></a>
<a class="icon.edit"></a>
</div>
</div>
我正在使用Jeff Morgan的Page Object gem,我想在任何给定的部分为编辑链接创建访问器。
挑战在于面板标题区分了我想要选择的主体。然后我需要访问父级并获取类"icon.edit"
的所有链接。假设我无法更改HTML来解决此问题。
这是一个开始
module RealEstateRatingPageFields
div(:general_risks_section, ....)
def general_risks_edit_links
general_risks_section_element.links(class: "icon.edit")
end
end
虽然如何让general_risks_section
访问者工作?
我想用表示文字'General Risks'...
的面板标题来表示父div答案 0 :(得分:3)
有很多方法可以获得一般风险部分。
使用阻止
访问器可以采用一个块,您可以以编程方式更详细地描述如何定位元素。这允许您定位区分元素,然后将DOM遍历到您实际需要的元素。在这种情况下,您可以找到带有匹配文本的标题并导航到其父标题。
div(:general_risks_section) { div_element(class: '__panel_header', text: 'General Risks').parent }
使用XPath
虽然更难阅读和写入,但您也可以使用XPath定位器。概念和思维过程与使用块相同。唯一的好处是它减少了元素调用的数量,这略微提高了性能。
div(:general_risks_section, xpath: './/div[@class="__panel_body"][./div[@class="__panel_header" and text() = "General Risks"]]')
XPath说:
.//div # Find a div element that
[@class="__panel_body"] # Has the class "__panel_body" and
[./div[ # Contains a div element that
@class="__panel_header" and # Has the class "__panel_header" and
text() = "General Risks" # Has the text "General Risks"
]]
使用正文
鉴于HTML,您也可以直接根据文本找到该部分。
div(:general_risks_section, class: '__panel_body', text: 'General Risks')
请注意,这假定给定的HTML未简化。如果实际上有其他文本节点,这可能不是最好的选择。