ruby-on-rails - Rails3 Google Maps 使用 selenium 进行测试

标签 ruby-on-rails google-maps selenium cucumber capybara

我正在尝试使用 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_elementwait_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/

相关文章:

ruby-on-rails - 是否可以在 Heroku 上托管 FAYE?

java - 如何点击网页元素来显示日期选择器?

c# - 有没有更快的方法来使用 Selenium C# 填充输入表单

python - 如何使用 selenium 和 Python 调用 send_keys()

android - 通过 setBoundsBias 限制自动完成结果

ios - 如何在 iOS 的右侧显示 Google map 信息窗口

ruby-on-rails - Rails 5 - 如何将外键迁移到 PostgreSQL?

ruby-on-rails - 性能:最小化数据库命中

ruby-on-rails - Bundler.require 不适用于我的 gem 中的 ActiveRecord

java - map 标记没有跟踪我