簡體   English   中英

的Watir。 如何在$ browser.link.click之類的行中調用頁面對象的元素?

[英]Watir. How to make a call to an element of page object, inside a line like $browser.link.click?

我們有一個頁面對象元素,例如

 link           (:test_link,      xpath: './/a[@id = '3'])

 unordered_list (:list,              id: 'test')

和代碼:

def method(elementcontainer, elementlink)

elementcontainer = elementcontainer.downcase.gsub(' ', '_')
elementlink = elementlink.downcase.gsub(' ', '_')
object = send("#{elementcontainer}_element")
object2 = send("#{elementlink}_element")


total_results_1 = object.element.links(id: '3')]").length
total_results_2 = object.element.links(object2).length
end

最后兩行包含了這個謎。

total_results_1能夠獲取ID ='3'的無序列表中包含的鏈接數。

total_results_2不起作用(當然)。 同樣,我不想在代碼中間編寫鏈接的標識。 這是在頁面對象中完成的。

如何在總可行的版本中編寫類似於total_results_2行的內容?

我可能會誤解這個問題,但是我認為您不需要為所需的內容創建方法。 所有這些都可以使用頁面對象訪問器完成。

假設我們有以下頁面(我將其與您的訪問者進行了匹配,盡管所有鏈接似乎都不會具有相同的ID):

<html>
  <body>
    <a id="3" href="#">1</a>
    <ul id="test">
      <li><a id="3" href="#">2</a></li>
      <li><a id="3" href="#">3</a></li>
      <li><a id="3" href="#">4</a></li>
    </ul>
    <a id="3" href="#">5</a>
  </body>
</html>

如您所做的,您可以使用訪問器定義列表:

unordered_list(:list, id: 'test')

要獲取ID為3但僅在列表中的鏈接,您可以:

  1. 將鏈接定義為集合-即使用links而不是link
  2. 使用塊查找元素。 這將允許您考慮元素嵌套-即在list元素中找到鏈接。

這可以通過以下方式完成:

links(:test_link){ list_element.link_elements(:id => '3') }

總共,您的頁面對象將是:

class MyPage
  include PageObject

  unordered_list(:list, id: 'test')
  links(:test_link){ list_element.link_elements(:id => '3') }
end

要查找鏈接數,您可以訪問元素集合並檢查其長度。

browser = Watir::Browser.new
browser.goto('your_test_page.htm')

page = MyPage.new(browser)
puts page.test_link_elements.length
#=> 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM