如何模拟与 Capybara 共享地理位置?

Posted

技术标签:

【中文标题】如何模拟与 Capybara 共享地理位置?【英文标题】:How to simulate sharing geolocation with Capybara? 【发布时间】:2011-09-09 21:02:51 【问题描述】:

我的场景要求用户授予应用程序使用其位置的权限。这个对话框在每个浏览器中看起来都不同。如何使用 Capybara 进行测试?

【问题讨论】:

【参考方案1】:

我已经在Cucumber 步骤定义中成功使用了它:

page.execute_script "navigator.geolocation.getCurrentPosition = function(success)  success(coords: latitude: 50.455755, longitude: 30.511565); "

【讨论】:

我喜欢这个解决方案,因为它可以模拟出预期的结果,谢谢先生!【参考方案2】:

如果我需要它用于测试套件流程并且不想调用 API,我会模拟/存根它。 不幸的是,尽管有自动测试的所有优点,但仍有一些需要手动完成。至少我从我的经验中学到了什么。

【讨论】:

【参考方案3】:

如果您正在使用 Chrome 进行测试,那么这可能会有所帮助:

How do I enable geolocation support in chromedriver for Selenium?

【讨论】:

【参考方案4】:

所以,我喜欢上面的 page.execute_script 版本...但是我发现这不适用于 turbolinks。

经过多次谷歌搜索,我想出了这个作为替代方案:

page
  .driver
  .browser
  .execute_cdp(
    'Page.setGeolocationOverride',
    accuracy: 100,
    latitude: latitude.to_f,
    longitude: longitude.to_f
  )

我不是这个解决方案的忠实拥护者,因为它正在访问他们当然建议反对的“私有 api”的一部分......但它现在有效。

更新:目前这适用于 selenium_chrome 驱动程序,但不适用于 selenium_chrome_headless... 回到绘图板。

【讨论】:

以上是关于如何模拟与 Capybara 共享地理位置?的主要内容,如果未能解决你的问题,请参考以下文章

将本地共享地理位置与其他设备进行反应

UNLocationNotificationTrigger - 不在模拟器中工作

如何提高区域跨界精度(模拟)(地理围栏)

如何使用 mockito/powermock 模拟 Google 的地理编码 API 请求?

陈少勤:如何建设通用地理实体数据仓库?

Xcode 4 中的地理位置模拟调试下拉菜单