Я пытаюсь использовать NightmareJS для загрузки страницы, нажмите кнопку, затем сделайте скриншот для тестирования. Обработчик кликов на кнопке запрашивает геолокацию. Это часть того, что я тестирую. Я хочу, чтобы страница отображалась определенным образом, если пользователь предоставляет разрешение на геолокацию и другой способ, если они отклоняются.
Проблема в том, что Nightmare не предоставляет метод для перехвата подсказки разрешения, чтобы принять или отклонить ее. После некоторых исследований я узнал, что Electron просто жестко закодирует это разрешение на "предоставленный", поэтому может даже не быть способ отклонить его.
То, что я хотел бы сделать, это заменить объект 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 не изменяется. Есть ли другой способ достичь этой цели?
Я думаю, что это возможно (или должно быть) в обоих проектах, вы можете попробовать изменить:
navigator.geolocation
к
window.navigator.geolocation
Это связано с тем, что большинство оценок вызовов выполняются в чистом контексте или, как я полагаю. Если это не сработает, Navalia может сделать это так, как это справедливо "голый металл", так сказать.
Удачи!