我正在尝试使用 Rails3 测试谷歌地图应用程序。我正在使用带有 capybara 和 Selenium 的 cucumber 进行 JavaScript 测试。
我有一张 map ,我等待加载谷歌地图,然后向我的服务器发送一个 ajax 请求,在那里我得到我要插入 map 的位置。
我想知道 selenium 是否可以等到加载谷歌地图,对我的服务器的 ajax 调用完成并且标记放置在 map 内。另一个问题是,如何在谷歌地图中选择这个标记。有选择器吗?
或者我应该采取其他方式,并使用像 Jasmine 这样的 JS 测试框架来测试我的类是否已加载等等。我对 Jasmine 没有任何经验,所以可以测试谷歌地图吗?
也许有人知道解决方案,或者如果不可能的提示,或者解决方法或... ;)
[更新 1]
我发现了如何在谷歌地图中选择标记。如果你看googles selenium tests你可以看看他们在做什么。例如选择一个标记:
waitForElementPresent xpath=//img[contains(@src,'marker')]
但是下一个问题来了。如何选择特定标记? javascript google maps API 中是否有办法为其分配 ID,以便我可以使用
#marker_1
, #marker_2
...?另一个奇怪的是,这个函数就像
wait_for_element
或 wait_for_condition
在我的 cucumber 步骤定义中不可用。谷歌 Selenium 测试是否使用像 waitForElementPresent
这样的自己的功能? ?还是这是标准的 Selenium 功能?我发现了很多帖子,他们总是使用类似的东西selenium.wait_for_condition
selenium.wait_for_element
or
@selenium.wait_for_condition
...
在我的步骤定义中,
selenium
和 @selenium
无变量。我怎样才能访问这些方法?我也发现了这个 post ,但它是从 08 年 10 月开始的,所以我认为必须有一个更好的解决方案(顺便说一句。这个解决方案一见钟情)。喜欢这个 page ,他们概述了一些 Selenium 方法如何等待条件或元素。这还存在吗?我怎样才能使用这个功能?
[更新 2]
该死的,我发现,我上面提到的 Selenium 测试是针对谷歌地图的 V2 的,而不是针对 V3 的。我试过了
wait_until { page.has_xpath?("//img[contains(@src,'marker')]") }
但它不起作用。该标记在 map 上可见,但我收到超时错误,因为使用此 XPath 选择器找不到它。我想知道是否通常可以从 DOM 中选择一个标记。
我还尝试在创建标记时为其分配一个附加属性:
// marker is the marker returned by google maps after adding it to the map
$(marker).attr('id', "marker_1");
但是当我尝试使用 jQuery 选择器
$("#marker_1")
访问它时,它没有找到它。因此,仍然没有解决方案。
最佳答案
我用我的方法执行步骤定义中的调用,如下所示:
page.execute_script("launchmap()")
然后检查它们在页面中的存在..然后在 capybara 中进行正常的 ajax 检查。标记将包含在 div 中,对吗?那么如果你调用launchmap并创建标记, capybara 应该能够找到你的标记
更新
发现了这个插件:http://vigetlabs.github.com/jmapping/examples/
它为您的谷歌地图提供语义标记(用于优雅降级),允许您使用 capybara 实际检查标记是否存在。希望它有所帮助(没有时间测试它,但看起来很有希望)
关于ruby-on-rails - Rails3 Google Maps 使用 selenium 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5336736/