在我們的自動化測試,在我們的代碼典型的行可能看起來像:如何使用css-modules在網站上調整Capybara finders?
find('.edit-icon').click
我們對我們的方式在我們的項目中使用CSS-模塊和我已經警告說,類名可能會發生巨大變化一個漂亮的滑稽的例子是這樣的網站,在其類名稱使用表情符號(當你檢查頁面):
會如何我最好的一個變化劇烈這個準備?我想我們的許多規格都打破了,但我有點擔心在我們的項目中無法使用這項新技術編寫測試。
在我們的自動化測試,在我們的代碼典型的行可能看起來像:如何使用css-modules在網站上調整Capybara finders?
find('.edit-icon').click
我們對我們的方式在我們的項目中使用CSS-模塊和我已經警告說,類名可能會發生巨大變化一個漂亮的滑稽的例子是這樣的網站,在其類名稱使用表情符號(當你檢查頁面):
會如何我最好的一個變化劇烈這個準備?我想我們的許多規格都打破了,但我有點擔心在我們的項目中無法使用這項新技術編寫測試。
使用自定義水豚選擇器,你可以從實際的css查詢中抽象出來並將它移動到一個位置。在你的評論中你提到需要改變一個以傳入值開始的類屬性。
Capybara.add_selector(:class_starts_with) do
css { |locator| "[class^=\"#{locator}\"]"
end
會做到這一點,則可以稱爲
find(:class_starts_with, 'something')
,或者如果你設置Capybara.default_selector =:class_starts_with這純粹是
find('something')
而不是改變default_selector另一種選擇應該只是定義一個像find_by_class_start這樣的助手方法,或者只是通過調用find:class_starts_with方法(如何使用Capybara的#find_field等)來實現。
還要注意,上面的自定義選擇將只有真正的工作,如果只有一個類名設置如果有多個預期,你可以選擇更改爲"[class^=\"#{locator}\"], [class*=\" #{locator}\"]"
一種方法是使用自定義的水豚選擇 - https://開頭的github .com/jnicklas/capybara/blob/master/lib/capybara/selector.rb - 爲了抽象,你可以做一些類似'find(:edit_button).click'的東西。儘管答案完全是「它取決於」 - 爲什麼你首先使用css類? –
在我提供的例子中,這在我的項目中很常見,最終得到的按鈕和其他元素無法通過任何標識文本或其他屬性找到。我還傾向於使用類名選擇器來避免在編寫期望時出現任何歧義/誤報(例如,如果某些文本預期會從一個區域跳到另一個區域)。我希望隨着我們的項目的進行,我可以提供一些更具體的例子。類是不是通常用於自動規格?謝謝你的幫助,湯姆。 – Phil
是有很多類 - 雖然我傾向於嘗試和使用它們作爲最後的手段。主要用例中沒有文本,其他屬性等的元素。正如我所提到的自定義選擇器可以在這裏幫助 - Capybara.add_selector(:edit_button){css do |定位器| '.edit-icon'end} - 然後將css隔離到一個地方。當類名稱發生變化時,您可以更改該選擇器,並且可能會在進入css模塊時執行類似'[class * ='\ _ edit \ _「]'的操作,具體取決於類名最終是如何組成的 –