8

我正在尝试使用 PhantomJS 运行 qunit 测试用例。当 phantomJS 尝试访问 DOM 的 navigator.geolocation 函数时,我的一项测试正在进行中。同样的测试在浏览器中运行良好,只是挂在带有 phantomJS 的控制台中。

phantomJS 是否支持地理位置?有什么建议吗?

在以下 if 条件下中断

  if(navigator.geolocation) {
            window.navigator.geolocation.watchPosition(updateLocation, null, { frequency: 3000 });
        }
4

2 回答 2

11

不。

只需检查features.js示例。

>phantomjs.exe features.js
Detected features (using Modernizr 2.0.6):

Supported:
  touch
  generatedcontent
  fontface
  flexbox
  canvas
  canvastext
  postmessage
  websqldatabase
  hashchange
  history
  draganddrop
  websockets
  rgba
  hsla
  multiplebgs
  backgroundsize
  borderimage
  borderradius
  boxshadow
  textshadow
  opacity
  cssanimations
  csscolumns
  cssgradients
  cssreflections
  csstransforms
  csstransitions
  localstorage
  sessionstorage
  webworkers
  applicationcache
  svg
  inlinesvg
  smil
  svgclippaths

Not supported:
  csstransforms3d
  webgl
  geolocation
  indexeddb
  video
  audio
于 2013-04-09T12:21:44.417 回答
5

您可以通过在初始化时将所需函数注入 DOM 来添加“geolocation-fake-support”以运行测试或执行其他操作。以下示例伪造了 navigator.geolocation.getCurrentPosition,因此当浏览器中的网站调用此 API 端点时,PhantomJS 将始终返回配置的位置。

webpage.onInitialized = function() {
    webpage.injectJs('geolocation.js')
};

地理位置.js:

window.navigator.geolocation = {
    getCurrentPosition: function (success, failure) {
        success({
            coords: {
                // Will always return Germany, Rostock
                latitude: 54.0834,
                longitude: 12.1004

            }, timestamp: Date.now()
        });
    }
};
于 2016-05-29T18:22:37.767 回答