我不得不在頁面中處理一些具有<g>
標籤的圖形項目。我可以做這樣的事情通過拖放到硒的webdriver找到他們:如何找到像<g>這樣的自定義標籤?
browser.wd.find_elements(:tag_name => "g")
什麼是對的Watir webdriver的等價?
另外,我會如何將這些硒元素轉換成watir元素?
我可以添加對<g>
標記的支持嗎?
我不得不在頁面中處理一些具有<g>
標籤的圖形項目。我可以做這樣的事情通過拖放到硒的webdriver找到他們:如何找到像<g>這樣的自定義標籤?
browser.wd.find_elements(:tag_name => "g")
什麼是對的Watir webdriver的等價?
另外,我會如何將這些硒元素轉換成watir元素?
我可以添加對<g>
標記的支持嗎?
解決方案1 - 的Watir-webdriver的等效:
相當於您在硒的webdriver正在做的事情是:
browser.elements(:tag_name => "g")
這樣你就可以做這樣的事情,以輸出每個元素的文本:
browser.elements(:tag_name => "g").each do |x|
puts g.text
end
解決方案2 - 添加支持對於G元素:
需要的Watir-webdriver的後,添加以下代碼:
module Watir
module Container
def g(*args)
G.new(self, extract_selector(args).merge(:tag_name => "g"))
end
def gs(*args)
GCollection.new(self, extract_selector(args).merge(:tag_name => "g"))
end
end
class G < Element
end
class GCollection < ElementCollection
def element_class
G
end
end
end
然後,可以治療的 'g' 等的任何其它元件。例如:
puts browser.g(:index, 0).text
browser.gs.each{ |x| puts x.text }
G和GCollection類將支持所有的標準元素方法。如果存在特定於該元素的事物,則可以將其他方法添加到該類中。
更新 - 添加自定義的方法的例子:
要得到光標的風格,你會添加一個方法來G類別是這樣的:
class G < Element
def cursor_style()
assert_exists
return @element.style("cursor")
end
end
這一操作將讓你得到光標屬性是這樣的:
puts browser.g(:index, 0).cursor_style
#=> move
與要素互動的任何自定義方法需要啓動assert_exists。然後,在該方法中,您可以使用@element變量處理元素。
注意,由於g組件從元素類繼承,你也可以使用了內置式的方法:
puts browser.g(:index, 0).style("cursor")
#=> move
watir或watir-webdriver不支持非標準的HTML標籤。部分原因是因爲我們必須支持的可能標記名稱的列表是無止境的。
如果您願意,您可以在自己的自定義標籤中進行monkeypatch。從長遠來看,如果您將不得不處理這些自定義標籤,那麼這可能是您的最佳解決方案,它的行爲與Watir API支持的其他標準HTML元素一樣。
您可以在標籤名稱上使用CSS選擇器,但只有在您堅持使用元素對象時才能使用,如Watir::Exception::MissingWayOfFindingObjectException: invalid attribute: :css中所述。如果你問我,這會讓事情變得不那麼可讀和/或有用,但可能是一個快速而簡單的解決方案,值得這方面的微小成本。
或者,您可以使用.driver
或.wd
方法來訪問webdriver功能,當您需要它的某些東西不被watir支持。 (但是這也並不像可讀)
感謝穿行 - 這真是棒極了。班級的其他方法會是什麼樣子?說找到一個屬性,如''? –
ibodog
我添加了一個按照您的請求添加自定義方法的示例。 –