Kullanarak:
Ruby: ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
Rails: 3.2.9
Capybara: 2.0.3
Tıklandığında bir AJAX gönderi isteği göndermesi ve bir JS yanıtı döndürmesi gereken bir bağlantının olduğu bir Rails uygulamam var.
Bağlantı kodu:
link_to("Send Notification", notification_path(user_id: user_id), remote: true, method: :post)
JS yanıtı (.js.haml dosyası), bağlantının bulunduğu sayfada aşağıdaki gizli div'i değiştirmelidir:
js.haml dosyasının içeriği:
:plain
var notificationStatusContainer = $('#notification_status');
notificationStatusContainer.val("#{@notification_status_msg}");
notificationStatusContainer.show();
Cucumber kullanarak kullanıcıya bildirim gönderme ve bildirim durumu mesajını görüntüleme senaryomu test ediyordum ( yerleşik Capybara destekli salatalık-rayları mücevher )
İd: notification_status öğesine sahip öğenin adım tanımımda başarılı yanıtta görünür olup olmadığını test etmeye çalışıyordum.Bunun için aşağıdaki ifadeleri denedim:
page.find('#notification_status').should be_visible
page.should have_selector('#notification_status', visible: true)
page.should have_css('#notification_status', visible: true)
page.find('#notification_status', visible: true)
page.find(:css, 'div#notification_status', visible: true)
Yukarıdakilerin hiçbiri benim için işe yaramadı ve adımımı başaramadı. Yukarıda listelenen 5 parçadan son 4 tanesi aşağıdaki hatayla başarısız oldu:
'expected to find css "#notification_status" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet)'
bu garipti çünkü aşağıdaki ifade doğru şekilde geçiyordu:
page.has_selector?('#notification_status')
Aslında, sayfa kaynağını kullanarak inceledim.
print page.html
hangisi geldi
<div style='' id='notification_status'></div>
beklenen oldu.
Sonunda bu bağlantı capybara'nın, bir elemanın özniteliğinin ham şekilde nasıl inceleneceğini gösteren bir elemanın niteliklerini öne sürdüğünü buldum .
Ayrıca Capybara belgelerinde görünür mü buldum? yöntem ( http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#visible%3F-instance_method ) aşağıdaki bilgiler:
Not all drivers support CSS, so the result may be inaccurate.
Böylece, bir elementin görünürlüğünü test ederken Capybara'nın görünür sonuçlarına dayanmadığı sonucuna vardım. bir CSS seçici kullanırken ve bağlantı capybara'da önerilen çözümü kullanırken bir öğenin niteliklerini ileri sürerken yöntem
Aşağıdakileri buldum:
module CustomMatchers
def should_be_visible(css_selector)
find(css_selector)['style'].should_not include('display:none', 'display: none')
end
end
World(CustomMatchers)
Kullanım:
should_be_visible('#notification_status')