gpt4 book ai didi

ruby - 页面对象 gem 。为没有 id 的元素创建访问器

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:42 24 4
gpt4 key购买 nike

假设我有一个简单的页面,其 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 的页面对象 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 访问器工作?

我希望它代表带有文本“一般风险”的面板标题的父 div...

最佳答案

有很多方法可以获取一般风险部分。

使用 block

访问器可以采用一个 block ,您可以在其中更编程地描述如何定位元素。这允许您定位一个有区别的元素,然后遍历 DOM 到您真正想要的元素。在这种情况下,您可以找到具有匹配文本的 header 并导航到其父级。

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 未被简化。如果实际上还有其他文本节点,这可能不是最佳选择。

关于ruby - 页面对象 gem 。为没有 id 的元素创建访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34796638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com