回答
如何禁用鏈接?這是你添加的課程嗎?屬性?
# Check for a link that has a "disabled" class:
page.should have_css("a.my_link.disabled")
page.should have_xpath("//a[@class='disabled']")
# Check for a link that has a "disabled" attribute:
page.should have_css("a.my_link[disabled]")
page.should have_xpath("//a[@class='disabled' and @disabled='disabled']")
# Check that the element is visible
find("a.my_link").should be_visible
find(:xpath, "//a[@class='disabled']").should be_visible
實際的xpath選擇器可能不正確。我不經常使用xpath!
這是一個有點亂,找出正確的XPath,這裏是正確的,使用
水豚0.4.1.1
# <a href="/clowns?ordered_by=clumsyness" class="weep">View Clowns</a>
page.should have_xpath("//a[@class='weep'][@href='/clowns?ordered_by=clumsyness']", :text => "View Clowns")
如果你只有無類的鏈接,使用
page.should have_link('View Clowns', :href => '/clowns?ordered_by=clumsyness')
像這樣的事情會黯然不起作用:
page.should have_link('This will not work!', :href => '/clowns?ordered_by=clumsyness', :class => "weep")
類選項將被忽略。
另一種簡單的解決方法是訪問屬性您正在尋找[]
的HTML:
find('#my_element')['class']
# => "highlighted clearfix some_other_css_class"
find('a#my_element')['href']
# => "http://example.com
# or in general, find any attribute, even if it does not exist
find('a#my_element')['no_such_attribute']
# => ""
注意Capybara
將自動嘗試等待異步請求完成,但它可能不會在某些情況下工作:
這裏是一個解決辦法,如果你有麻煩與被異步更新的元素斷言:
Vrey有用的解決方案。謝謝! – 2012-06-01 21:08:09
我有一個字符串的CSS位置,例如。 'find('a#my_element [href]')',是否有可能檢索該屬性的值?嘗試使用類似'find('a#my_element [href]')。value'的表達式,但似乎不起作用:( – mickael 2012-12-16 04:00:28
@mickael嘗試'find('a#my_element [href]').text'或'find ('a#my_element [href]')。native'。讓我知道,如果其中任何一個給你預期的結果。 – bowsersenior 2012-12-17 18:59:30
page.should have_link('It will work this way!', {:href => '/clowns?ordered_by=clumsyness', :class => "smile"})
have_link預計hash選項裏面是空的,如果你不提供任何。您可以指定鏈接應具有的任何屬性 - 只要確保您通過ONE散列中的所有選項。
希望這有助於
PS:對於像數據方法的屬性,你必須通過屬性名稱作爲字符串,因爲連字符打破符號。
在花括號裏貼他們似乎對我很有用。謝謝。 – 2012-03-23 12:13:36
[它從來沒有工作](https://github.com/jnicklas/capybara/issues/1016#issuecomment-15020730),並不適用於水豚。我不知道爲什麼有9個人投了這個票。 – 2013-03-17 10:58:15
這不再適用於水豚2.使用水豚<2的人可以使用上述 – Tian 2013-06-26 18:01:01
bowsersenior,感謝暗示
另一種簡單的解決方法是訪問HTML屬性你正在尋找[]
下面是一個例子:
let(:action_items) { page.find('div.action_items') }
it "action items displayed as buttons" do
action_items.all(:css, 'a').each do |ai|
expect(ai[:class]).to match(/btn/)
end
end
只要有可能,你應該嘗試使用Capybara提供的包裝,這將更加一致地工作驅動程序。
對於disabled
的特定情況下,一個包裝在2.1中引入:https://github.com/jnicklas/capybara/blob/fc56557a5463b9d944207f2efa401faa5b49d9ef/History.md#version-210
如果你使用它,你會得到兩個RackTest和騷靈有意義的結果:
HTML:
<input type="text" id="disabled-false" ></div>
<input type="text" id="disabled-true" disabled></div>
<input type="text" id="disabled-js-true" ></div>
<input type="text" id="disabled-js-false" disabled></div>
<script>
document.getElementById('disabled-js-true').disabled = true
document.getElementById('disabled-js-false').disabled = false
</script>
測試:
!all(:field, 'disabled-false', disabled: false).empty? or raise
all(:field, 'disabled-false', disabled: true).empty? or raise
all(:field, 'disabled-true', disabled: false).empty? or raise
!all(:field, 'disabled-true', disabled: true).empty? or raise
all(:field, 'disabled-js-true', disabled: true).empty? or raise
all(:field, 'disabled-js-false', disabled: false).empty? or raise
Capybara.current_driver = :poltergeist
!all(:field, 'disabled-false', disabled: false).empty? or raise
all(:field, 'disabled-false', disabled: true).empty? or raise
all(:field, 'disabled-true', disabled: false).empty? or raise
!all(:field, 'disabled-true', disabled: true).empty? or raise
!all(:field, 'disabled-js-true', disabled: true).empty? or raise
!all(:field, 'disabled-js-false', disabled: false).empty? or raise
請注意,如果使用這種替代CSS選擇器的方式,那麼如果您開始使用支持Js的驅動程序,則JavaScript測試將無需任何更改即可正常工作。
可運行的測試文件here。
我建議在兩個單獨的斷言中使用have_link
和find_link(name)[:disabled]
。雖然單獨執行第二個斷言更簡單,但這會使有關缺失鏈接的錯誤消息看起來更好,從而使您的測試結果更易於閱讀。
expect(page).to have_link "Example"
expect(find_link("Example")[:disabled]).to be false
注意"Example"
可以更改爲鏈接的名稱或ID。
使用Rspec3的語法,我就是這麼做的:
expect(page).not_to have_selector(:link_or_button, 'Click here')
只要您可以使用page.has_css?
方法
page.has_css?('.class_name')
如果元素存在,這將返回true
。
根據驗證做一些操作。
page.has_css?('.class_name') do
#some code
end
- 1. 使用水豚檢查元素屬性
- 2. 水豚斷言騷靈
- 3. 元素在水豚
- 4. 水豚:按屬性查找含有某物的元素不是
- 5. 斷言高度已使用水豚
- 6. 我如何在許多水豚的第一個元素內斷言?
- 7. 水豚::元素未找到
- 8. 水豚:找不到元素
- 9. 水豚,一個css元素
- 10. 在xsd中定義屬性斷言xsd 1.1中的anyTipe元素
- 11. RSpec的水豚元素在X在DOM
- 12. 水豚 - 請按類名點擊元素
- 13. 水豚沒有找到表單元素
- 14. 元素不可見硒水豚
- 15. 水豚元素是不是在用Firefox
- 16. Rails:水豚沒有找到div元素
- 17. RSpec水豚找不到元素
- 18. 水豚Poltergeist獲取元素文本
- 19. 水豚如何匹配元素
- 20. 水豚斷言具有選擇所希望的值不工作
- 21. XSD 1.1斷言子元素
- 22. 哪種風格與水豚和SitePrism斷言?
- 23. 從水滴中選擇水豚時發現元素錯誤
- 24. 如何斷言只有屬性斷言不是空的?
- 25. 的soapUI:如何屬性的斷言
- 26. Groovy的屬性斷言失敗
- 27. Python的斷言在屬性設置
- 28. 返回多個元素的斷言器
- 29. Nightwatch js斷言排序的元素值
- 30. Selenium IDE中的斷言元素顏色
謝謝@idlefingers,我想斷言也使用xpath。我該怎麼做? – kriysna 2011-03-02 08:52:20
我已經更新了我的答案。如果xpath選擇器是錯誤的,你必須做一些搜索或者打開一個新的問題。 – idlefingers 2011-03-02 09:49:55
感謝這個答案幫助:) – 2011-06-28 04:33:20