Rails3 Google Maps使用selenium进行测试

23t*_*tux 9 selenium google-maps ruby-on-rails cucumber capybara

我正在尝试使用Rails3测试谷歌地图应用.我正在使用带有水豚和硒的黄瓜进行JavaScript测试.我有一张地图,我等待加载谷歌地图,然后发送一个ajax请求到我的服务器,在那里我得到我插入地图的位置.我想知道是否可以使用selenium等到加载谷歌地图,完成对我的服务器的ajax调用并将标记放在地图内.另一个问题是,如何在谷歌地图中选择此标记.有选择器吗?

或者我应该走另一条路,并使用像Jasmine这样的JS测试框架来测试我的类是否已加载等等.我对Jasmine没有任何经验,所以可以测试谷歌地图吗?

也许有人知道一个解决方案,或一个提示,如果它不可能,或解决方法或......;)

[更新1]

我已经找到了如何在谷歌地图中选择标记.如果你看看googles selenium测试你可以看看他们在做什么.例如,选择标记:

waitForElementPresent   xpath=//img[contains(@src,'marker')]
Run Code Online (Sandbox Code Playgroud)

但接下来是下一个问题.如何选择特定标记?是否有一种方法可以在javascript google maps API中为其分配ID,以便我可以使用#marker_1,#marker_2......?

另一个奇怪的事情是,我的黄瓜步骤定义中的功能类似于wait_for_elementwait_for_condition不可用.谷歌selenium测试使用自己的功能waitForElementPresent吗?或者这个标准的硒功能是什么?我发现了很多帖子,他们总是使用类似的东西

selenium.wait_for_condition
selenium.wait_for_element

or

@selenium.wait_for_condition
...
Run Code Online (Sandbox Code Playgroud)

在我的步骤定义中selenium@seleniumvar a nil.我该如何访问这些方法?我也发现了这篇文章,但它是从08年10月开始的,所以我认为必须有一个更好的解决方案(顺便说一下.这个解决方案一见钟情).

就像在这个页面上一样,他们概述了一些如何等待条件或元素的selenium方法.这仍然存在吗?我该如何使用这个功能?

[更新2]

该死的,我发现,我上面提到的硒测试是针对谷歌地图的V2,而不是针对V3.我试过了

wait_until { page.has_xpath?("//img[contains(@src,'marker')]") }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.标记在地图上可见,但是我收到超时错误,因为找不到此XPath选择器.我想知道是否通常可以从DOM中选择一个标记.

我还尝试在创建标记时为标记分配一个附加属性:

// marker is the marker returned by google maps after adding it to the map
$(marker).attr('id', "marker_1");
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用jQuery选择器访问它时$("#marker_1"),它找不到它.所以,仍然没有解决方案.

cor*_*ded 1

我所做的就是执行步骤定义中的调用,如下所示:

page.execute_script("launchmap()")

然后检查它们在页面中是否存在..然后在水豚中进行正常的ajax检查。标记将包含在 div 中,对吗?那么如果你调用 launchmap 并创建标记,水豚应该能够找到你的标记

更新

发现这个插件:http://vigetlabs.github.com/jmapping/examples/

它为您的谷歌地图提供语义标记(用于优雅降级),允许您使用水豚实际检查标记是否存在。希望它有帮助(没有时间测试它,但看起来很有希望)