复杂元素的 Watir 页面对象



拥有这个html:

<div class = "account">
<div class = "name"></div>
<div class = "email"></div>
<div class = "phone"></div>
</div>
<div class = "account">
<div class = "name"></div>
<div class = "email"></div>
<div class = "phone"></div>
</div>
<div class = "account">
<div class = "name"></div>
<div class = "email"></div>
<div class = "phone"></div>
</div>

我想创建一个包含帐户列表的页面对象,但由于我是 Ruby 和 watir 的新手,我不知道它会是什么样子。

下面是帐户类:

class Account
def initialize(browser)
@browser = browser
end
def user
@browser.div(:class => "name")
end
def email
@browser.div(:class => "email")
end
def phone
@browser.div(:class => "phone")
end
end

和我需要帐户列表的页面对象

class Page 
def initialize(browser)
@browser = browser
end
#here should be a list of accounts
end 

我假设您正在滚动自己的页面对象框架(而不是询问如何在特定框架中执行此操作(。

我将创建一个类来表示一个帐户。这与你拥有的相同,只是它假设你将传入一个元素(而不是浏览器(。此元素应表示所有帐户内容 - 即它期望<div class = "account">。它的方法是查找与此元素相关的内容。

class Account
def initialize(element)
@element = element # expected to be div.account
end
def user
@element.div(:class => "name")
end
def email
@element.div(:class => "email")
end
def phone
@element.div(:class => "phone")
end
end

在页面类中,您可以创建一个 #accounts 方法来 (1( 获取所有帐户div 和 (2( 将它们包装在帐户类中:

class Page
def initialize(browser)
@browser = browser
end
def accounts
@browser.divs(class: 'account').map { |d| Account.new(d) }
end
end

然后,您对页面的使用情况将是:

page = Page.new(browser)
# Inspecting the collection of accounts
page.accounts.count
#=> 3
# Inspecting a specific account (note the 0-based index)
page.account[1].user.text
#=> "<second accounts name>"

最新更新