2017-08-09 1 views
1

Ich versuche mit NightmareJS eine Seite laden, klicken Sie auf eine Schaltfläche, dann machen Sie einen Screenshot zum Testen. Der Klick-Handler auf der Schaltfläche fordert den Geolocation an. Dies ist ein Teil von dem, was ich testen möchte. Ich möchte, dass die Seite auf eine bestimmte Weise angezeigt wird, wenn der Benutzer die Geolocation-Berechtigung erteilt, und auf eine andere Weise, wenn sie abgelehnt wird.Mock eingebaute Objekte mit NightmareJS

Das Problem ist, dass Nightmare keine Methode für mich offen legt, um die Erlaubnis zur Annahme oder Ablehnung abzufangen. Nach einigen Nachforschungen habe ich erfahren, dass Electron diese Berechtigung nur "festgeschrieben" hat, so dass es nicht einmal eine Möglichkeit geben kann, sie auf "abgelehnt" zu setzen.

Was ich tun möchte, ist das Ersetzen von Electrons navigator.geolocation Objekt mit einem Schein, der auf die Geolocation-Anfrage in einer bestimmten Weise reagiert.

new Nightmare().goto('https://example.com') 
    .evaluate(function() { 
     navigator.geolocation = { 
      getCurrentPosition(cb) { 
       cb({coords: latitude: 42, longitude: -42}); 
      } 
     } 
    }) 
    .click('#locateMe') 
    .screenshot() 
    .end() 
    .then(diffScreenshot) 

Allerdings, wenn ich versuche, diese scheint es, wie das navigator.geolocation Objekt nicht ändert. Gibt es eine andere Möglichkeit, dieses Ziel zu erreichen?

Antwort

1

Ich denke, das ist möglich, in beiden Projekten (oder sollte), könnten Sie zu ändern versuchen:

navigator.geolocation 

Um

window.navigator.geolocation 

Dies ist, weil die meisten bewerten Anrufe in einem sauberen Kontext ausgeführt werden , denke ich. Wenn das nicht klappt, könnte Navalia es schaffen, weil es sozusagen "bare-metal" ist.

Viel Glück!

+0

Die Verwendung von window.navigator hat funktioniert! Vielen Dank! – arkanciscan