最近在写cucumber测试的过程中,遇到一些问题,本来打算系统的整理一下,看样子没有这个时间,就能记多少记多少,杂乱无章的收吧。
在Rails项目中,越来越多的使用AJAX的时候,验收测试页面用cucumber就不行了,因为,Cucumber本身是使用webrat的模拟浏览器行为。
那么,就需要用selenium来测试,这时候,一些事件的封装就不太一样了。
比如:
<%= image_submit_tag "image_file_name", :id => "submit" %>
你可以写
And I press "submit"
实际上,我们查看step定义我们知道press是调用的click_button
如果,我们页面ajax调用又多个submit按钮,或者多个input框,而且用同样的name,(也有时候就是循环产生的)
那么在cucumber下我们可能要用scope
When /^I (press|follow|check|uncheck|choose) "([^\"]*)" for (.*) whose (.*) is "([^\"]*)"$/ do |action, whatyouclick, class_name, var_name, value|
unless var_name == "id" then
id = eval("\"#{class_name}\".classify.constantize.find_by_#{var_name}(\"#{value}\").id.to_s")
else
id = value
end
within("tr[id=row_#{class_name}_#{id}]") do
case action
when "press"
click_button(whatyouclick)
when "follow"
click_link(whatyouclick)
when "check"
check(whatyouclick)
when "uncheck"
uncheck(whatyouclick)
when "choose"
uncheck(whatyouclick)
end
end
end
然而,我们尝试就会发现selenium并不支持within
那么就需要使用封装了的selenium语法进行测试
When /(?:|I )press "([^"]*)" via ajax$/ do |locator|
selenium.click "css=#{locator}"
end
When /^(?:|I )fill in "([^\"]*)" with "([^\"]*)" via ajax$/ do |locator, value|
selenium.type( "css=#{locator}",value )
end
Given /^I check "([^"]*)" via ajax$/ do |locator|
selenium.check "css=#{locator}"
end
其中,locator可以支持的语法包括
引用
id=id
name=name
dom=javascriptExpression
xpath=xpathExpression
link=textPattern
css=cssSelectorSyntax
更详细的信息可以参考
http://seleniumhq.org/docs/04_selenese_commands.html
http://release.seleniumhq.org/selenium-core/0.8.0/reference.html
关于用selenium 定位一个属性是否在一个html范围内
见下篇
分享到:
相关推荐
单元测试和功能测试是Rails中两种主要的测试类型,它们在目的、范围和实现方式上有所不同。本文将详细探讨Rails中单元测试和功能测试的区别,并提供实际代码示例。 单元测试和功能测试是Rails测试策略的两个重要组成...
- **使用Guard和Spork自动测试**:Guard和Spork是一些自动化测试工具,可以在修改代码后自动运行测试,提高开发效率。 - **标签**:使用标签(Tags)来组织测试,便于选择性地运行某些测试。 - **其他提速方法**:...
Ruby-APITaster是一款强大的工具,专为Rails应用的API测试和可视化设计。它使得开发者能够迅速地对API接口进行互动式测试,从而确保API的功能正确性和性能稳定性。这款工具的出现,极大地简化了API测试过程,提高了...
combustion, 简单,优雅的Rails 引擎测试 燃烧in是一个以简单有效的方式测试 Rails 引擎的库,而不是在规范或者测试文件夹中创建完整的Rails 应用。它允许你在引擎的上下文中编写你的规格,只使用你需要的Rails 应用...
RSepc 是一款基于 Ruby 的行为驱动开发(BDD)测试框架,它被广泛应用于 Rails 应用程序的测试。RSpec 提供了一种清晰且简洁的方式来编写可读性强的测试代码,使得测试用例更像是对软件行为的规范描述,而不是简单的...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
1. **Autotest**:Autotest是一个自动运行测试的工具,当检测到代码发生改变时,它会自动重新运行相关的测试用例,从而提供即时的反馈,帮助开发者快速定位和修复问题。 2. **Spork**:Spork是一个预加载Rails环境...
这一章节将教授如何使用Rails的测试框架进行单元测试、集成测试和功能测试。同时,也会介绍如何对应用进行基准测试,评估其性能表现。 #### 12. Deployment and Production Use(部署和生产使用) 最后,本书将...
Rails鼓励TDD(测试驱动开发),包括单元测试、集成测试和功能测试。RSpec、Capybara等库可以帮助编写和运行这些测试,确保代码质量。 这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手...
Rails 5.0开发和Travis CI测试 将捆绑程序gem缓存到Docker卷中,该卷在构建和Gemfile更改之间持续存在 运行Capybara测试的Selenium Chrome独立实例,以及与测试浏览器会话进行交互的VNC连接 这些洞察力需要一段时间...
7. **Testing**:Rails强调测试驱动开发,内置了RSpec、Minitest等测试框架,支持单元测试、集成测试和功能测试,确保代码质量。 8. **Asset Pipeline**:Rails的资产管道处理JavaScript、CSS和图像等静态资源,...
2. **Mocking与Stubbing详解**:对于新接触测试驱动开发(TDD)的开发者来说,本书对Mocking和Stubbing等概念进行了详尽而易懂的解释,让读者能够更好地掌握这些技术并应用于实际项目中。 3. **构建高效测试套件**:...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
5. 测试框架:Rails 内置了测试支持,包括 Unit 测试、Functional 测试和Integration 测试,使用 RSpec 和 Test::Unit 等工具,确保代码的质量和可维护性。 6. 开发者工具:Rails 2.3.x 包含了 Rails Console,一个...
以下是一些关键知识点的详细解释: 1. **路由系统**:Rails的路由负责将HTTP请求映射到控制器的行动上。源代码中的`config/routes.rb`文件定义了所有应用的路由规则。通过阅读源代码,你可以了解如何设置资源路由、...
Rake是Ruby社区广泛使用的任务自动化工具,该指南详细解释了如何使用Rake任务来运行测试,这在持续集成和日常开发中极为重要。 七、关于Test::Unit的简短说明 尽管Rails提供了丰富的测试支持,但了解其基础——...