2013-04-15 15 views
12

Web tarayıcısı ile phantomJS'yi deniyorum ve javascript uyarılarını işleme konusunda sorun yaşıyorum. Phantomjs sürücüsünün istenen_capabilities alanı olduğunu fark ettim 'handlesAlerts': False Bu değeri true olarak ayarlamanın bir yolu var mı? Bariz yolu denedim ama herhangi bir etkisi yoktur:Selenium İstenen Yetenekler - set tutamakları PhantomJS sürücüsü için araçlarKullanıcılar

drv = webdriver.PhantomJS(desired_capabilities={'handlesAlerts': True}) 

print drv.desired_capabilities 

{u'browserName': u'phantomjs', 
u'driverName': u'ghostdriver', 
u'driverVersion': u'1.0.3', 
u'handlesAlerts': False, 
u'javascriptEnabled': True,...} 

Ben sözlüğe drv.desired_capabilities['handlesAlerts'] = True değeri değiştirebilir, ama bir uyarı geçmek çalıştığınızda bir hata iletisi alabilirsiniz.

$cat index.html 
<html> 
<body> 
<script type="text/javascript"> 
    alert('FOO!'); 
</script> 
    Hello World. 
</body> 
</html> 

>>> from selenium import webdriver 
>>> driver = webdriver.PhantomJS() 
>>> driver.desired_capabilities['handlesAlerts'] = True 
>>> driver.get('index.html') 
>>> alert = driver.switch_to_alert() 
>>> alert.text 

Traceback (most recent call last): 
<snip> 
selenium.common.exceptions.WebDriverException: Message: 
    'Invalid Command Method - Request => 
       {"headers":{"Accept":"application/json", 
           "Accept- Encoding":"identity", 
           "Connection":"close", 
           "Content-Type":"application/json;charset=UTF- 8", 
           "Host":"127.0.0.1:56009", 
           "User-Agent":"Python- urllib/2.7"}, 
        "httpVersion":"1.1", 
        "method":"GET", 
        "url":"/alert_text", 
        "urlParsed": {"anchor":"", 
           "query":"", 
           "file":"alert_text", 
           "directory":"/", 
           "path":"/alert_text", 
           "relative":"/ alert_text", 
           "port":"", 
           "host":"", 
           "password":"", 
           "user":"", 
           "userInfo":"", 
           "authority":"", 
           "protocol ":"", 
           "source":"/alert_text", 
           "queryKey":{}, 
           "chunks":["alert_text"]}, 
           "urlOriginal":"/session/cd31ed90-a5f8-11e2-856d-5783db9f5342/alert_text"}' 

cevap

13

API, istenen özelliklerin yapıcıya geçirileceğini belirtir. Bununla birlikte, bir sürücünün istenen özelliklerde istenen bir özelliği desteklememesi söz konusu olabilir. Bu durumda, sürücü tarafından bir hata atılmaz ve bu kasıtlıdır. Oturum tarafından, oturumun gerçekte desteklediği yetenekleri gösteren bir yetenek nesnesi döndürülür.

Bu durumda aslında olan şey budur. PhantomJS sürücüsü, the source code'da görüldüğü gibi uyarıları desteklemez, döndürülen yetenekler nesnesi çok fazla gösterir. Çoğu dil bağında, bu döndürülen yetenekler nesnesi salt okunurdur; döndürülen nesnenin okuma-yazma olabileceği dil bağlamalarında, bu yetenekleri değiştirmek oturumda gerçek bir etki yaratmaz. Bekleyen W3C WebDriver specification'da, sunucu yeteneği sağlayamıyorsa ancak henüz bildiğim kadarıyla henüz bir sürücü tarafından uygulanmadıysa, bir istisna atar bir requiredCapabilities ayarı vardır.

+1

Viki sayfası yanıltıcı. API, gerçekte istenen yeteneklerden geçecek şekilde uygulanmaktadır ve uzak uç, oturumu oluşturabilecekleri şekilde oturumu oluşturur. Uzak uç oturumda gerçekte mevcut olan yetenekleri döndürür ve iletişim tek yönlüdür (yerel düzenlemeler uzak oturumu etkileyemez). Bekleyen [W3C WebDriver spesifikasyonu] (http://www.w3.org/TR/webdriver/) 'da, sunucu yeteneği sağlayamıyorsa bir istisna atacak bir "requiredCapabilities" ayarı var, ancak Bildiğim kadarıyla henüz herhangi bir sürücü tarafından uygulandı. – JimEvans

+1

Downvoter, doğru cevabı reddetme konusunda doğru bir noktayı göremiyorum –

+1

@usmcs Özür dilerim mizah girişiminde yolum var ve "snark" gibi görünüyordu. Bu niyet değildi. Sürücüyü daha iyi ifade etmek için cevabı yeniden yazdım. Ayrıca, söz konusu wiki sayfasının bu durumla ilgili daha net olması için güncellendiğini de unutmayın. Diğer downvoters, bu cevap şeylerin nasıl olduğunu açıklar. Sadece duymak istediğin şey değil ya da istediğin gibi değil, cevabı daha az geçerli ya da doğru yapmaz. – JimEvans