2014-07-01 26 views
6

Bir web sayfasının davranışını farklı yönlendirenlerin isteklerine göre test etmeye çalışıyorum. Şimdiye kadar aşağıdaki yapıyorumPython'da selenyum yoluyla Phantomjs

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.referer'] = referer 

sorun web sayfası html bazı şeyleri değiştirecek ajax istekleri vardır ve bu ajax istekleri web sayfasının kendisi değil yönlendiren olarak ben de verdi Yönlendireni sahip olmasıdır başlangıç. Görünüşe göre, başlangıçta ve her müteakip talep ajax ya da görüntü ya da çapanın aynı referansı aldığı ve ne kadar derinlikli olursa olsun hiçbir zaman değişmeyeceği, referandumun sadece ilk talep için çözüm getireceği bir çözümdür. ve dinlenmek için dinamik mi?

bazı aramadan sonra ben this bulundu ve selenyum sayesinde bunu başarmak için çalıştı, ama ben bu konuda henüz bir başarı olmadı:

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.onInitialized'] = """function() {page.customHeaders = {};};""" 

Herhangi fikirler?

+0

Herhangi bir şans Evan? Aynı problemim var. – norbertpy

+1

@norbertpy Hey, gecikme için üzgünüm. Hayır, hatırladığım gibi bunu python ile yönetmedim. Bir js komut dosyası oluşturmak zorunda kaldım ve istekte bulunan bir yönlendirici ile isteği başlatırken, boş dizeye yönlendiriciyi sıfırlamak için kullanılan "tamamlanmamış" (veya benzer bir şey) adlı bir olay kullandım ve işe yaradı. Eğer gerçek betiklere ihtiyacınız varsa bana bildirin. – Evan

+1

@norbertpy Aşağıdaki cevap benim için çok geç geldi, ama işe yarayacak gibi görünüyor. Herşeyi (ish) python içerisinde tutmak istiyorsanız bunu deneyebilirsiniz. – Evan

cevap

2

Bunu başarmak için, bunu başarmak için PhantomJS'yi kullanmanız gerektiğini söyleyebilirim.

PhantomJS, WebDriver'ın PhantomJS örneğiyle iletişim kurmak için kullandığı HTTP API'sini sağlayan GhostDriver adlı bir modül içerir. WebDriver ile yapmak istediğiniz her şeyin GhostDriver tarafından desteklenmesi gerekiyor, ancak bu, onInitialized'un GhostDriver tarafından desteklenmediği anlamına geliyor.

Macera dolu hissediyorsanız, PhantomJS repository klonlayabilir ve istediğinizi yapmak için src/ghostdriver/session.js dosyasını kopyalayabilirsiniz.

_init yöntem aşağıdaki gibidir:

_init = function() { 
    var page; 

    // Ensure a Current Window is available, if it's found to be `null` 
    if (_currentWindowHandle === null) { 
     // Create the first Window/Page 
     page = require("webpage").create(); 
     // Decorate it with listeners and helpers 
     page = _decorateNewWindow(page); 
     // set session-specific CookieJar 
     page.cookieJar = _cookieJar; 
     // Make the new Window, the Current Window 
     _currentWindowHandle = page.windowHandle; 
     // Store by WindowHandle 
     _windows[_currentWindowHandle] = page; 
    } 
}, 

Sen verilen kodu kullanarak deneyebilirsiniz:

page.onInitialized = function() { 
    page.customHeaders = {}; 
}; 

orada oluşturulan page nesne üzerinde.

Ne denediğinize bağlı olarak, çok fazla çaba harcayabilir ve tarayıcıyı hendeleyebilir ve yalnızca HTTP isteklerini doğrudan requests modülü gibi bir şey kullanarak test edebilirsiniz.