【问题标题】:Mock built-in objects with NightmareJS使用 NightmareJS 模拟内置对象
【发布时间】:2017-08-09 21:21:14
【问题描述】:

我正在尝试使用 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 对象似乎没有改变。有没有其他方法可以实现这个目标?

【问题讨论】:

    标签: javascript testing mocking electron nightmare


    【解决方案1】:

    我认为这在两个项目中都是可能的(或应该是),您可以尝试更改:

    navigator.geolocation
    

    window.navigator.geolocation
    

    这是因为大多数评估调用都是在干净的上下文中运行的,或者我认为是这样。如果这不起作用,那么 Navalia 或许可以做到,因为它可以说是相当“裸机”。

    祝你好运!

    【讨论】:

    • 使用 window.navigator 似乎奏效了!谢谢!
    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多