Объект страницы Watir для сложных элементов - PullRequest
0 голосов
/ 14 сентября 2018

Имея этот 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 

1 Ответ

0 голосов
/ 14 сентября 2018

Я предполагаю, что вы катите свою собственную инфраструктуру объекта страницы (вместо того, чтобы спрашивать, как это сделать в конкретной среде).

Я бы создал класс для представления учетной записи.Это то же самое, что и у вас, за исключением того, что предполагается, что вы передадите элемент (а не браузер).Этот элемент должен представлять все содержимое учетной записи - то есть он ожидал бы <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) получить все разделы учетной записи и (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>"
...