2015-05-03 94 views
1

頁面上有幾個元素,我需要它們的數組,但沒有帶有特定文本的元素。我現在做的只是水豚:簡單的方法來找到沒有特定文本的元素

tabs_quantity = page.all(:css, 'div.class1 ul.tabs li.tab.exist', visible: true) 
tabs_quantity.each { |x| 
    if x.text != 'Main' 
    ...blah-blah-blah... 

I`ve看到「:文本=>‘文本’無處不在,但我需要的是相對平等的,所以我已經搜查和測試,但還沒有找到,如果有什麼簡單的像

tabs_quantity = page.all(:css, 'div.class1 ul.tabs li.tab.exist', visible: true, :text !=> //or "not equal", whatever// 'Main') 

感謝

回答

1

我同意Raza。肯定會嘗試爲您要找的元素設置一堂課。

如果事實證明這是不可能的,這裏有幾個選項。

1)你可以嘗試的正則表達式:

# match text that doesn't contain 'Main' 
page.all('li.tab.exist', text: /^(?:(?!Main).)*$/) 

這不是超級容易閱讀。但是,由於您的課程範圍有所縮減,因此可能不會太慢​​。

2)另一種方法是XPath的:

# find li with class of 'exist' and any text except 'Main' 
page.all(:xpath, "//li[contains(@class, 'exist') and not(contains(.,'Main'))]") 

這也有點unweildy,特別是如果你想要去的深入你原來的CSS匹配。我肯定會隨同它一起發表評論。

更多信息:使用css類肯定更快,更容易。儘可能避免文字匹配。

+0

非常感謝您的詳細解答,xpath似乎正是我所需要的。我也考慮過正則表達式,但xpath更容易閱讀和檢查何時沒有機會更改代碼並設置類。 –

0

只是一個類添加到您要選擇的組元素和找到:

page.find('.class_name') 
+0

沒有機會改變代碼。 –

+0

你有什麼共同的屬性在你想要選擇的領域? –

+0

我不這麼認爲,屬性可以改變。 –

相關問題