2012-05-23 68 views
4

我不得不在頁面中處理一些具有<g>標籤的圖形項目。我可以做這樣的事情通過拖放到硒的webdriver找到他們:如何找到像<g>這樣的自定義標籤?

browser.wd.find_elements(:tag_name => "g") 

什麼是對的Watir webdriver的等價?

另外,我會如何將這些硒元素轉換成watir元素?

我可以添加對<g>標記的支持嗎?

回答

4

解決方案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 
+0

感謝穿行 - 這真是棒極了。班級的其他方法會是什麼樣子?說找到一個屬性,如''? – ibodog

+0

我添加了一個按照您的請求添加自定義方法的示例。 –

1

watir或watir-webdriver不支持非標準的HTML標籤。部分原因是因爲我們必須支持的可能標記名稱的列表是無止境的。

如果您願意,您可以在自己的自定義標籤中進行monkeypatch。從長遠來看,如果您將不得不處理這些自定義標籤,那麼這可能是您的最佳解決方案,它的行爲與Watir API支持的其他標準HTML元素一樣。

您可以在標籤名稱上使用CSS選擇器,但只有在您堅持使用元素對象時才能使用,如Watir::Exception::MissingWayOfFindingObjectException: invalid attribute: :css中所述。如果你問我,這會讓事情變得不那麼可讀和/或有用,但可能是一個快速而簡單的解決方案,值得這方面的微小成本。

或者,您可以使用.driver.wd方法來訪問webdriver功能,當您需要它的某些東西不被watir支持。 (但是這也並不像可讀)

相關問題