Tag: 水豚

如何保护我的Capybara测试免受任意文本更改?

总的来说,我喜欢Capybara的工作原理。 我发现很难相信在测试中编写用户可见文本真的是个好主意; 例如 click_link(‘Delete’, match: :first) 好吧,所以我用这样的测试编写我的应用程序,然后我的设计师通过,或者品牌/营销人员看到“删除”并且有一个合适因为我们不“删除”事物,我们“删除”它们(或者其他) – 点是,它是任意的)。 因此,他们通过对我的应用程序中的按钮和链接的内容进行任意更改,现在即使应用程序正常工作,我的所有测试都会被破坏。 他们不是真正的编码员,所以他们不知道如何处理我的测试,实际上,我认为我的测试不应该关心他们选择改变的文本。 他们不应该真正关心我是否需要将整个shebang翻译成其他语言。 解决这个问题的理智方法是什么? 我以为我可以为每个可测试元素添加一个CSS类并寻找它,但这似乎可能与设计师发生冲突。 我可以为我的测试添加其他无意义的元数据来提示吗? 或者我是以错误的方式看待这个?

将轨道错误发送到rspec输出

我将Capybara与rspec结合使用,用于rails应用程序的集成测试。 我希望在测试期间生成的任何错误(路由错误,控制器中的错误,任何内容)与rspec输出中的“puts”语句相同。 这可能吗? 另外,这是一个合理的想法,还是我只是愚蠢?

我如何在Capybara w / selenium中使用ruby-debug

我们让Capybara使用selenium驱动程序但是当我尝试在步骤中使用“调试器”时它不太有效。 例如,在调试控制台中输入’page’有效,但输入’page.body’挂起。 在尝试使用akephalos驱动程序的调试器时,我们也很奇怪。 使用akephalos我们无法输入调试提示…实际上我们可以,但是你必须多次按键才能在终端中随机显示一个字母。 做’Ctrl-C’让我们输入,但是我们得到了’DRb connection … something’之类的错误(抱歉再也没有确切的错误)。 我认为问题是像selenium和akephalos这样的驱动程序在同一个进程中运行测试和服务器,它会混淆ruby-debug。 我将尝试单独运行服务器(脚本/服务器测试)并使用Capybara.app_host =’http:// localhost:3000’来查看是否会产生影响。 我尝试使用akephalos,但由于它刚刚启动了另一个进程内服务器,所以无法实现。 是否有人使用与Capybara和selenium的ruby-debug? 这对其他人有用吗? 我错过了一些明显的东西吗

测试function足够吗?

标题说明了,如果我使用水豚测试: visit this page expect this content 并为每个function(例如登录,注册,搜索,点击所有链接和按钮等)执行此操作,这样就足够了吗? 为什么我需要测试控制器和模型? 如果function按预期工作,这是否意味着一切都在协调工作?

如何使用Cucumber-Capybara断言是否存在闪存变量?

我正在使用Cucumber和Capybara运行Rails 3.0.7项目,我有一个步骤定义,检查是否存在flash [:error]: Then /^I should be able to see the main page properly$/ do current_path.should == “/” flash[:error].should == nil end 当我进行黄瓜测试时,我收到错误 And I should be able to see the main page properly # features/step_definitions/user_auth_steps.rb:17 undefined method `flash’ for nil:NilClass (NoMethodError) ./features/step_definitions/user_auth_steps.rb:19:in `/^I should be able to see the main page properly$/’ features/user_auth.feature:10:in `And […]

如何使用Rails,Cucumber和Capybara测试Dropzone.js上传?

我有一个使用Cucumber和Capybara进行测试的Rails项目。 我有一个使用Dropzone.js的文件上传页面。 我的上传工作很有用,可以使用对话框或拖放。 测试是另一回事。 我的表格中有以下字段: 但是,在步骤定义中,我尝试了一些查找和附加文件数据的方法,但它们都不起作用。 我试过fill_in: fill_in “photo_image”, with: photo 我试过用css选择器找到: find(‘#photo_image’).set photo 我试过用xpath找到: find(:xpath, “//input[@id=’photo_image’]”).set photo 但他们都没有看到隐藏的领域。 Unable to find css “#photo_image” (Capybara::ElementNotFound) Unable to find xpath “//input[@id=’photo_image’]” (Capybara::ElementNotFound) Unable to find field “photo_image” (Capybara::ElementNotFound) 有没有可以使用Dropzone.js处理上传的测试方法还是没有希望?

在Capybara中选择混合模式内容

我正在尝试使用Capybara提取混合模式内容。 我是用Nokogiri做的 ,但是想知道为什么与Capybara不可能相似。 require ‘nokogiri’ doc = Nokogiri::HTML(“NameA Johnson “) puts doc.at_xpath(“//h1/text()”).content 它可以工作,但是当我在Capybara中尝试相同的XPath选择器时,它不起作用。 visit(‘http://stackoverflow.com’) puts find(:xpath, “//h1/text()”).text 它引发了错误: [remote server] file:///tmp/webdriver-profile20120915-8089-kxrvho/extensions/fxdriver@googlecode.com/components/driver_component.js:6582:in `unknown’: The given selector //h1/text() is either invalid or does not result in a WebElement. The following error occurred: (Selenium::WebDriver::Error::InvalidSelectorError) [InvalidSelectorError] The result of the xpath expression “//h1/text()” is: [object Text]. It should be […]

Rails3 Google Maps使用selenium进行测试

我正在尝试使用Rails3测试谷歌地图应用程序。 我正在使用带有水豚和selenium的黄瓜进行JavaScript测试。 我有一张地图,我等待加载谷歌地图,然后发送一个ajax请求到我的服务器,在那里我得到我插入地图的位置。 我想知道是否可以使用selenium等到加载谷歌地图,完成对我的服务器的ajax调用并将标记放在地图内。 另一个问题是,如何在谷歌地图中选择此标记。 有选择器吗? 或者我应该走另一条路,并使用像Jasmine这样的JS测试框架来测试我的类是否已加载等等。 我对Jasmine没有任何经验,所以可以测试谷歌地图吗? 也许有人知道解决方案,或提示是否可行,或解决方法或……;) [更新1] 我已经找到了如何在谷歌地图中选择标记。 如果你看看googles selenium测试你可以看看他们在做什么。 例如,选择标记: waitForElementPresent xpath=//img[contains(@src,’marker’)] 但接下来是下一个问题。 如何选择特定标记? 是否有一种方法可以在javascript google maps API中为其分配ID,以便我可以使用#marker_1 , #marker_2 …? 另一个奇怪的事情是,我的黄瓜步骤定义中没有像wait_for_element或wait_for_condition这样的函数。 谷歌selenium测试是否使用自己的函数,如waitForElementPresent ? 或者这个标准的seleniumfunction是什么? 我发现了很多post,他们总是使用类似的东西 selenium.wait_for_condition selenium.wait_for_element or @selenium.wait_for_condition … 在我的步骤定义中, selenium和@selenium var a nil。 我该如何访问这些方法? 我也发现了这篇文章 ,但它是从08年10月开始的,所以我认为必须有一个更好的解决方案(顺便说一句。这个解决方案一见钟情)。 就像在这个页面上一样,他们概述了一些如何等待条件或元素的selenium方法。 这仍然存在吗? 我该如何使用这个function? [更新2] 该死的,我发现,我上面提到的selenium测试是针对谷歌地图的V2,而不是针对V3。 我试过了 wait_until { page.has_xpath?(“//img[contains(@src,’marker’)]”) } 但它不起作用。 标记在地图上可见,但是我收到超时错误,因为找不到此XPath选择器。 […]

如何正确配置rails test以在浏览器中运行它? (site_prism,黄瓜,水豚,seleniumwebdriver)

我正在为rails app编写测试,我使用site_prism,capybara,selenium和cucumber。 如何设置Selenium驱动程序在浏览器(firefox)中运行我的测试? 例如,它是一个function: Given /^I navigate to Dashboard page$/ do @page = DashboardPage.new # Dashboardpage is inheritor of SitePrism::Page @page.load @page.login_form.login_field.set ‘admin’ @page.login_form.password_field.set ‘test’ @page.login_form.signin_button.click @page.title.include? ‘Dashboard’ end 这是我的features / support / env.rb配置文件: require ‘cucumber/rails’ require ‘capybara’ require ‘capybara/cucumber’ require ‘selenium-webdriver’ require ‘site_prism’ # cypabara settings Capybara.default_selector = :css Capybara.ignore_hidden_elements = false Capybara.default_wait_time = […]

将自定义标题传递给Capybara的Selenium

我们使用自定义标头来validation我们的网络应用。 http代理服务拦截请求,确认用户的真实性,然后将自定义标头注入请求。 为了测试应用程序,我需要在请求到达ApplicationController方法之前将这些标头写入请求。 现在,当前的hack适用于我所有的非JavaScript测试: # in hooks.rb Before do require ‘capybara/driver/rack_test_driver’ module Capybara::Driver class Authentic “foo”) end end end Capybara.register_driver(:authentic) do |app| Capybara::Driver::Authentic.new(app) end Capybara.default_driver = :authentic end #in the controller class ApplicationController File.join(Rails.root, “public”, “403.html”) unless request.env.keys.include?(‘foo’) end end 任何我不想被认证的请求,我可以使用标签来使用常规的rack_test驱动程序: Feature: Authentication Valid users should be authenticated. Invalid users should be redirected to the […]