1

我通过黄瓜行为开发我的应用程序,并且我想包含HTML5 getCurrentPosition

有没有办法从 Selenium 中的 Firefox 浏览器或 Cucumber 中的 Capybara 浏览器发送这样的地理位置?

我的应用程序现在调用navigator.geocoder.getCurrentPosition(some_callback)以向用户请求位置。现代浏览器和大多数移动浏览器会提示用户是否要将其位置发送到应用程序。我想伪造这种行为,并在测试时简单地向我的应用程序发送一个 lat:long。

4

1 回答 1

0

由于我的 Cucumber Features 没有测试 Google Maps JavaScript 是否真的有效,所以我决定简单地为那个 JavaScript 添加一个小的测试扩展。

JavaScript 现在只需获取参数latitude=8&longitude=52并使用它,getCurrentPosition在给定时进行模拟。可以使用附加参数test来呈现表示地图“中心”的字符串,这是可测试的。

$(document).ready(function(){
  if ((urlParam('latitude') >= 0) && (urlParam('longitude') >= 0)) {
    var latitude = urlParam('latitude')
    var longitude = urlParam('longitude')
    window.navigator.geolocation.getCurrentPosition = function(success) {
      var position = {"coords" : { "latitude": latitude, "longitude": longitude }};

      if (urlParam('test') >= 0) { #extension for testability
        $("#map_canvas").html("latitude: "+ latitude +" longitude: "+ longitude);
      }

      success(position);
    }
  }
});

urlParam()确定 URL 中参数的辅助函数在哪里:null如果找不到则返回。

额外的好处是地图是“可链接的”,您现在可以制作一个 URL 并使用它来使地图居中。

我的步骤定义是:

Then /^it should center the map on my current location$/ do
  visit maps_path({:latitude => 20, :longitude => 20, :test => true})
  page.should have_content "latitude: 20 longitude: 20"
end
于 2013-03-12T09:51:55.480 回答