2013-04-09 5 views
8

Ich versuche, Testfälle mit PhantomJS zu starten. Einer meiner Tests hängt sich ein, wenn phantomJS versucht, auf die navigator.geolocation-Funktion von DOM zuzugreifen. Der selbe Test funktioniert gut im Browser, hängt einfach in der Konsole mit phantomJS.Unterstützt phantomJS geolocations?

doe phantomJS Unterstützung geolocations? irgendein Vorschlag?

Brüche in der folgenden, wenn die Bedingung

if(navigator.geolocation) { 
      window.navigator.geolocation.watchPosition(updateLocation, null, { frequency: 3000 }); 
     } 

Antwort

10

Nr

einfach überprüfen Sie die features.js Beispiel.

>phantomjs.exe features.js 
Detected features (using Modernizr 2.0.6): 

Supported: 
    touch 
    generatedcontent 
    fontface 
    flexbox 
    canvas 
    canvastext 
    postmessage 
    websqldatabase 
    hashchange 
    history 
    draganddrop 
    websockets 
    rgba 
    hsla 
    multiplebgs 
    backgroundsize 
    borderimage 
    borderradius 
    boxshadow 
    textshadow 
    opacity 
    cssanimations 
    csscolumns 
    cssgradients 
    cssreflections 
    csstransforms 
    csstransitions 
    localstorage 
    sessionstorage 
    webworkers 
    applicationcache 
    svg 
    inlinesvg 
    smil 
    svgclippaths 

Not supported: 
    csstransforms3d 
    webgl 
    geolocation 
    indexeddb 
    video 
    audio 
+0

Thank you very much. Es war sehr hilfreich. Es gelang, über den Geolocation zu springen –

4

Sie können hinzufügen „Geolocation-fake-Unterstützung“ für durch die Injektion der erforderlichen Funktionen in das DOM auf Initialisierungstests oder tun andere Sachen laufen. Das folgende Beispiel täuscht die navigator.geolocation.getCurrentPosition vor. Wenn also die Website im Browser diesen API-Endpunkt aufruft, gibt PhantomJS immer den konfigurierten Standort zurück.

webpage.onInitialized = function() { 
    webpage.injectJs('geolocation.js') 
}; 

geolocation.js:

window.navigator.geolocation = { 
    getCurrentPosition: function (success, failure) { 
     success({ 
      coords: { 
       // Will always return Germany, Rostock 
       latitude: 54.0834, 
       longitude: 12.1004 

      }, timestamp: Date.now() 
     }); 
    } 
};