2016-03-19 30 views
2

AJAX'ın yüklemeyi bitirmesine izin vermek için PhantomJS'in sayfayı birkaç saniye Capybara'ya döndürmesini nasıl sağlayabilirim? Geri is alıyorum HTML gövde: sayfa onun AJAX varlıklarını yükleme bitmeden PhantomJS sayfasını döndü bana anlatıyorNasıl AJAX yüklenen kadar sayfa Capybara dönmek için gecikme poltergeist/PhantomJS almak için?

<!--div class='loading'>PLEASE WAIT WHILE PAGE LOADS</div--> 

. Bunu yavaşlatmanın bir yolu var mı? Rasterize.js çözümünü kullanmayı denedim ama poltergeistin "phantomjs_options" hashına eklediğim herhangi bir komut dosyası gibi gözüküyor.

cevap

3

Sizi bekleyen bir Capybara yöntemini kullanarak, içeriğin sayfada yalnızca AJAX tamamlandıktan sonra sayfada bulunması gerektiğini varsayalım. Örneğin, sayfa "Sayfa yüklendi!" AJAX RSpec kullanıyorsanız tamamlanmış, ve seni varsayarak yalnızca sonra, şunu yapın: Daha sonra güvenli bir şekilde tamamlamış olan AJAX bağlıdır sayfadaki diğer şeyler test edebilirsiniz

expect(page).to have_content("Page loaded!") 

. görünmesini belirli bir içeriği bekleyin

Capybara yöntemleri find ve find_* yöntemleri, within, has_content?/has_no_content?,/has_no_css?has_css?, has_selector?/has_no_selector?, click_*, fill_in, check, uncheck, select ve choose sayılabilir. Bazı Capybara yöntemleri , current_path, visit, execute_script, evaluate_script ve text ve value gibi düğüm erişimcileri dahil olmak üzere beklemez. all ve first bunlara beklemek için belirli bir şey vermenizi sağlayacak seçenekleri (:count, :minimum, :maximum, :between), yoksa beklemeyin. Bu bir mayın tarlası. (Listeleri çoğunlukla this blog post'dan aldım.)

Beklemenin başka yolları (sleep (hatalı), veritabanını AJAX'ın neden olduğu bir değişiklik oluşuncaya dek yoklama vb.), Ancak sizin için bekleyen Capybara yöntemlerini kullanmak da vardır. her zamanki ve önerilen yol.

+0

Tamam Tamam, ancak yine de boş etiketler alıyorum. Baktığım site Angular.js'de yazılıyor ve "ng-cloak" etiketleriyle kaplanmış gibi görünüyor, bu da her şeyi işlemeye hazır olana kadar hiçbir şey vermeyeceği anlamına geliyor. Sayfayı istemek ve sonra birkaç saniye için phantoms render işlemini geciktirmek için bir yolu var mı? – bkunzi01

+0

Bildiğim kadarıyla değil. Testini sadece uyuyabilirsin, ama bu yavaş bir testi garantiler. Gerçekten bekleyebileceğiniz bir içerik bulmaya çalışacağım. Bu şekilde çok sayıda Açısal test ettim. Ayrıca, poltergeistin, sayfanın birinden oluşmadığından emin olmanız için [Javascript hatalarını yeniden yükseltmek üzere yapılandırılmış] olduğundan emin olun (https://github.com/teampoltergeist/poltergeist#customization). –

+0

Dang, "ziyaret" ten sonra rasterize.js eklemeye kadar herşeyi uyduruyor ama bu, Mechanize ya da Nokogiri'den daha fazlasını elde edemiyor gibi görünüyor.gibi sadece şeyler:

<- -!> bunu iki gün oldu çünkü ben çok memnun oluruz artık tavsiyen var ve hala olursam <- -
!> kare bir lol. – bkunzi01

0

değil aslında yüklü sayfadaki css için akıllıca bekliyor, ama bunu yapacağını yolu ne olduğundan emin: x Eğer Kapibara eğer erroring önce izin vermek istediğiniz saniye sayısıdır

Capybara.using_wait_time(x) { page.find('css_here') } 

CSS'yi bulamıyor.

0
expect(page).to have_content "Page loaded!", wait: x