2017-08-09 22 views
1

NightmareJSを使用してページをロードし、ボタンをクリックしてから、スクリーンショットをテストしてテストします。ボタンのクリックハンドラがジオロケーションを要求します。これは私がテストしているものの一部です。ユーザーがジオロケーションを許可している場合はページを特定の方法で表示し、拒否する場合は別の方法でページを表示します。NightmareJSでモック組み込みオブジェクトをモック

ナイトメアでは、許可または拒否するアクセス許可のプロンプトを傍受する方法が公開されていません。いくつかの研究の後、私は、エレクトロンがこの許可を「与えられた」ものにハードコードしているので、それが拒否されるように設定する方法さえないかもしれないことを学びました。

私がしたいのは、Electronのnavigator.geolocationオブジェクトを、特定の方法でジオロケーション要求に応答するモックに置き換えることです。

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

しかし、これを試してみると、navigator.geolocationオブジェクトは変更されないようです。この目標を達成するための他の方法がありますか?両方のプロジェクトで、私はこれが可能である(またはあるべき)だと思う

答えて

1

、あなたが変更してみてください可能性がありますほとんどはコールがきれいなコンテキストで実行されている評価するため

navigator.geolocation 

window.navigator.geolocation 

にこれがあります、または私は思う。これがうまくいかなければ、Navaliaはそれをかなり「ベアメタル」と言いながら行うことができるかもしれません。

運が良かった!

+0

window.navigatorを使用しているようです!ありがとう! – arkanciscan

関連する問題