`

Rails测试确认框

阅读更多
普通的webrat和cucumber做这样的测试会比较费劲,特别是涉及ajax交互的时候,那么,看了篇关于用selenium在java测试的文章

见后,发现ruby的selenium封装并没有那么复杂,但是,确有一些技巧


实现如下:


Given /^I choose "([^"]*)" on the next confirmation$/ do |type|
  selenium.send( "choose_#{type}_on_next_confirmation" )
end


Given /^I choose$/ do
  # selenium.send( "choose_#{type}_on_next_confirmation" )
  selenium.get_confirmation()
end



  Scenario: Successfully remove page  if choose ok
    Given I click on "Show/Hide"
    And I should see "My"
    And I choose "ok" on the next confirmation
    And I click on "remove page "
    And I choose
    When I click on "Show/Hide"
    Then I should see "1 pages"
    When I click on "Show/Hide"
    Then I should see "My"

主要用到了selenium_client的几个方法:

        def get_confirmation()
            return string_command("getConfirmation", [])
       end


引用

Retrieves the message of a JavaScript confirmation dialog generated during the previous action.

By default, the confirm function will return true, having the same effect as manually clicking OK. This can be changed by prior execution of the chooseCancelOnNextConfirmation command.

If an confirmation is generated but you do not consume it with getConfirmation, the next Selenium action will fail.

NOTE: under Selenium, JavaScript confirmations will NOT pop up a visible dialog.

NOTE: Selenium does NOT support JavaScript confirmations that are generated in a page‘s onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until you manually click OK.


        def choose_ok_on_next_confirmation()
             remote_control_command("chooseOkOnNextConfirmation", [])
         end


         def choose_cancel_on_next_confirmation()
            remote_control_command("chooseCancelOnNextConfirmation", [])
         end


上面两个方法的源代码说明,是调用selenium自己的对应方法,也就是封装,这时可以参考selenium自己的API看这个两个方法怎么用。

引用

By default, Selenium‘s overridden window.confirm() function will return true, as if the user had manually clicked OK; after running this command, the next call to confirm() will return false, as if the user had clicked Cancel. Selenium will then resume using the default behavior for future confirmations, automatically returning true (OK) unless/until you explicitly call this command for each confirmation.

Take note - every time a confirmation comes up, you must consume it with a corresponding getConfirmation, or else the next selenium operation will fail.


引用

Undo the effect of calling chooseCancelOnNextConfirmation. Note that Selenium‘s overridden window.confirm() function will normally automatically return true, as if the user had manually clicked OK, so you shouldn‘t need to use this command unless for some reason you need to change your mind prior to the next confirmation. After any confirmation, Selenium will resume using the default behavior for future confirmations, automatically returning true (OK) unless/until you explicitly call chooseCancelOnNextConfirmation for each confirmation.

Take note - every time a confirmation comes up, you must consume it with a corresponding getConfirmation, or else the next selenium operation will fail.



引用

Selenium处理弹出窗口
分类:

对网页弹出窗口,如WIKI所述,若要保持脚本运行稳定,必须在waitForPopUp这个弹出窗口之后紧跟运行selectWindow命令选中这个弹出窗口(示例),如果仍不稳定请参考这个示例。这里介绍了chooseCancelOnNextConfirmation、chooseOkOnNextConfirmation等JavaScript脚本实现的弹出窗口处理函数,selenium会弹出网页窗口,因为它重写了window.open在文件selenium-browserbot.js函数BrowserBot.prototype.modifyWindowToRecordPopUpDialogs中的newOpen,但这必须在window.onload之后创建才有效。对于HTTPS安全性弹出窗口证书的处理,见Selenium RC。



对非网页弹出窗口,如window.alert,window.confirm,window.prompt,window. showModalDialog等,有如下方法:

1.封装Windows Api,对Java语言则有Java Native Interface (JNI)或者J/Invoke(示例)。

2.Selenium RC中开启proxy injection(PI)模式也可以识别,这种模式提供了一个HTTP代理在浏览器之前自动更改所有接收到的HTML。window.alert, window.confirm,window.prompt在文件selenium-browserbot.js函数BrowserBot.prototype.modifyWindowToRecordPopUpDialogs中被覆写。

3.这里用window.open覆写了window. showModalDialog,同样实现的还有在文件selenium-browserbot.js函数BrowserBot.prototype._modifyWindow实现开始部分添加对ModalDialog的实现。
0
0
分享到:
评论

相关推荐

    Rails项目源代码

    Rails鼓励TDD(测试驱动开发),包括单元测试、集成测试和功能测试。RSpec、Capybara等库可以帮助编写和运行这些测试,确保代码质量。 这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手...

    使用Aptana+Rails开发Rails Web应用(中文)

    为了运行和测试应用,你需要在命令行中使用Rails服务器。在Aptana中,可以使用内置的终端工具。打开“Terminal”视图,输入`rails server`启动服务器,然后在浏览器中访问`http://localhost:3000`查看你的应用。 在...

    rails性能优化

    在使用Rails基准测试器时,可以指定不同的选项来进行性能测试,例如通过-perf选项来启用或覆盖默认的日志记录级别,通过-nocache选项关闭Rails缓存以排除缓存对测试结果的影响,以及通过-path选项来指定测试脚本的...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    5. **易于测试**:Rails提供了完善的单元测试、集成测试框架,便于开发者编写高质量的代码。 ### 三、构建RESTful API的关键步骤 1. **确定资源**:首先明确API需要处理哪些资源(例如用户、订单、文章等),并为...

    Rails 3 in Action

    书中第二章提到 **测试驱动开发(TDD)** 和 **行为驱动开发(BDD)**,这两种方法是 Rails 社区广泛采用的测试策略。 - **测试驱动开发(TDD)**: - 测试先行:先编写测试用例,再编写满足这些测试的代码。 - 循环...

    Agile Web Development with Rails 3nd Edition Beta.pdf

    可以通过在命令行中输入`rails -v`来确定正在使用的Rails版本。 #### 二、作者团队与贡献者 《敏捷Web开发与Rails》第三版由多位业界专家共同撰写: - **Sam Ruby**:Rails项目的贡献者之一,对Web技术有着深厚的...

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    通过执行`rails -v`命令,可以快速确定当前运行的Rails版本。 ### 敏捷Web开发 本书的核心主题是敏捷Web开发,这是一种迭代和增量的开发方式,强调软件开发过程中的灵活性和响应变化能力。它与传统的瀑布式开发...

    Agile Web Development with Rails

    要确定自己正在使用的Rails版本,可以在命令行中输入`rails -v`命令查看。这有助于确保代码的正确运行,并避免由于版本差异带来的问题。 #### 二、Rails框架概述 Rails是一个开源的Web应用框架,使用Ruby语言编写...

    Rbuy for Rails源代码

    描述中的“Rbuy for Rails源代码”进一步确认了这是一个开源项目,提供了Rbuy组件的原始编程文本,允许开发者查看、学习和修改其内部工作原理。源代码对于开发者来说非常重要,因为它提供了深入理解软件如何运行的...

    rails的经典学习项目

    标签"rails,例子"进一步确认了这是一个关于Rails框架的示例代码或教程。Rails的例子通常包含了从创建新的Rails应用开始,一直到部署上线的全部步骤,包括数据库迁移、路由设置、控制器和模型的编写、视图的渲染以及...

    rails2.3.3

    这个压缩包对于想要在Linux环境下回溯历史版本的Rails开发者或者研究老项目的人员来说非常有用,因为不同的Rails版本可能会有不同的行为和API,理解这些差异有助于维护旧代码或进行兼容性测试。同时,这也为那些不...

    Ruby-Split基于Rack的AB测试框架

    Split框架充分利用了Rack的特性,将A/B测试的逻辑无缝地集成到Ruby on Rails或其他Rack兼容的应用中。 首先,让我们深入了解一下什么是A/B测试。A/B测试是一种统计方法,用于比较两种或多种变体(如网页设计、营销...

    Rails的中文乱码问题

    4. **数据库连接**:确认数据库连接器(如ActiveRecord)的连接参数中包含正确的字符集配置,如`encoding: 'utf8mb4'`。 5. **模板引擎**:ERB、Haml、Slim等模板引擎在处理中文时也可能需要设置编码。在Rails中,...

    Crafting Rails 4 Applications

    - **rails 4**:再次确认了本书关注的是Rails 4这一特定版本。 #### 部分内容解析: - **Beta版信息**:本书目前处于Beta阶段,这意味着它仍在开发中,未经过全面的技术编辑和校对。可能存在错误、拼写错误、语法...

    rails2

    - **Rails** 内置了测试框架,支持编写不同级别的测试用例。功能测试(也称为集成测试)主要关注应用程序的整体行为,而单元测试则专注于测试单独的代码模块。 - 通过编写全面的测试用例,开发者可以在修改代码或...

    ruby on rails 实例depot

    11. **测试(Testing)**:Rails提供了一套完整的测试框架,包括单元测试、集成测试和功能测试。`test/`目录下存放着各种测试文件,通过`rails test`命令运行。 12. **Gemfile与依赖管理**:Gemfile是Rails项目的...

    Agile Web Development with Rails, 4th Edition.pdf

    因此,在开始项目之前,确定正确的Rails版本是非常重要的一步。书中提供了如何安装特定版本Rails的方法,并且推荐读者访问官方文档以获取有关版本变更的最新信息。 #### 八、总结 《Agile Web Development with ...

    Rails确认替换为SweetAlert_Ruby_HTML_下载.zip

    在Rails应用中,我们经常需要处理用户确认操作,比如删除、更新等,确保用户在执行不可逆操作前进行确认。传统的确认方式通常是浏览器自带的弹窗,但这种方式样式单一,用户体验较差。因此,很多开发者转向了第三方...

    rails项目必备组件

    Rails项目必备组件通常包括框架的核心组件、数据库管理、前端资源、测试工具和其他辅助库。以下将详细介绍这些关键组件及其作用。 1. **Rails框架核心组件**: - **ActionPack**:包含ActionController和Action...

Global site tag (gtag.js) - Google Analytics