Ruby 页面对象Gem。为没有ID的元素创建访问器
假设我有一个简单的页面,它的ID比我想要测试的要少Ruby 页面对象Gem。为没有ID的元素创建访问器,ruby,watir-webdriver,page-object-gem,Ruby,Watir Webdriver,Page Object Gem,假设我有一个简单的页面,它的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="
<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>
但是,如何让general\u risks\u部分
accessor工作
我想用文本“一般风险”来表示面板标题的父div…有很多方法可以获得一般风险部分 使用块 访问器可以使用一个块,在这个块中,您可以更加编程地描述如何定位元素。这允许您定位一个区别元素,然后将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没有简化。如果确实存在其他文本节点,这可能不是最佳选择
div(:general_risks_section, class: '__panel_body', text: 'General Risks')