You are the best one!!

发布新日志

  • 安装Ruby for Eclipse 开发环境

    2012-02-08 11:07:03

    1. 下载Ruby:http://www.ruby-lang.org/en/downloads/。 之前下过install版本ruby186-26.exe,就直接安装。安装完后,go to RubyGem Package Manager, use command $gem update --system 更

    新最新版Gem, 更新完后,看到最新版本RubyGems 1.8.16 installed。
     
    2. 下载Eclipse:http://www.eclipse.org/downloads/。下了个最全的package,eclipse-jee-indigo-SR1-win32.zip。只要解压,无需安装。

    3. 下载JDK(Java Develop Kit):jdk-7-windows-i586.exe,直接运行,安装完后JDK版本是1.7.0。
       Note:只有装好JDK后,eclipse才能正常运行。

    4. Install Ruby Development Tools(RDT) for eclipse。以前是有地方下的,现在好像没有了。不过网站提供在线下载。方法:打开eclipse, Help->Install New Software, 在work with里输入:http://download.aptana.com/studio3/plugin/install,然后Enter。接下来一路next就好了。这里要下载很长的时间,有时网络不好。
        Note: 要使用Eclipse开发ruby,必须安装RDT plugin。安装好以后,打开eclipse,在File->New中可以看到Ruby Project。

    5. 安装ie的自动化API - Watir

    三、配置Ruby for Eclipse环境:

    1. 我使用的Ruby版本是1.86,Eclipse版本是3.3.1,安装完成基本上不用再做任何配置,打开Eclispe>Windowns>Preferences>Ruby>Installed Interpreters,可以看到缺省已经设置了JRuby做为虚拟机;

    2. 如果你希望使用原生的Ruby做为虚拟机,则可以点击“Add”按钮设定Ruby的运行目录。到此时设置即告完成,不必像先以前的版本那样设置其它的系统路径。

    四、Hello Ruby:

    1. 选择菜单Eclispe>New>Project>Ruby>Ruby project,建立一个Ruby工程“HelloRuby”;

    2. 在新建的Ruby工程上右击鼠标,选择New>Ruby Class,建立一个新的Ruby类,类名为HelloRuby;

    3. 在新类中写入下列代码,Hello Ruby就完成了。在工程上右击菜单Run as>Ruby Application即可输出结果。

    class HelloRuby
    print "Hello Ruby!"
    end

  • ruby + mysql + rails 学习笔记

    2009-10-15 15:37:00

    历经坎坷ruby终于连上mysql, 写出来和大家一起分享一下。

    配置信息:

    1. ruby gem 1.3.5

    2. 到mysql官网下载mysql安装包: mysql-5.1.39-win32.msi,安装在c:\mysql下,不要有空格。安装完后,去网上下mysql管理工具mysql-gui-tools-noinstall-5.0-r16-win32。把mysql配置成功后,在里面建个数据库mybook和表book用做测试。把c:\mysql\bin\libmySQL.dll拷贝到c:\ruby\bin.(这步很关键)

    3. 安装mysql的gem。我装的是2.8.1版本。

    4. 测试ruby和mysql连接。

    require "mysql"

    dbc=Mysql.real_connect('localhost','root','','mybook')

    res=dbc.query('select * from books')

    while row=res.fetch_row do

    puts "#{row[0]}"

    end

    5. 安装rails,版本2.3.4

  • ( 转) 使用 Watir 加速面向 Web 应用的自动化测试程序的开发

    2009-10-08 18:18:52

  • A good website for testing documents

    2009-10-08 17:51:02

      I found a good website for testing documents, but it's English only.

    http://www.exforsys.com/tutorials/testing.html

    <\h3>

  • 转载:使用 Eclipse 插件 Ruby Development Tools

    2009-09-22 15:15:59

    本文介绍如何使用 Eclipse 插件 Ruby Development Tools(RDT),这个插件使 Eclipse 能够成为一流的 Ruby 开发环境。那些希望利用 Eclipse 社区丰富的基础设施来支持开发的 Ruby 开发人员会从本文中受益,对有兴趣使用 Ruby 的 Java™ 开发人员也会有所收获。

    为什么要使用 Ruby?

    为什么 Java 开发人员会关心 Ruby?Ruby 是 10 年前在日本开发出来的通用脚本语言。与流行的信念相反,它是一种纯面向对象语言。与 Java 技术不同,Ruby 没有标量,所以所有东西(包括整数)都是一类对象。Ruby 的语法很大程度上借鉴于 Smalltalk、Python 和 Ada。与 Java 语言相同的地方是,Ruby 也是一种单继承语言,但是它提供了 Java 技术所缺乏的某些高级特性,比如闭包(与 steroids 上的匿名内部类相似)和 mix-ins(与接口相似,但是它们与类的绑定不太紧密)。Ruby 也具有很高的可移植性,可以在所有主流操作系统上运行。

    Ruby 现在已经很流行了,人们开始用它建立各种应用程序。因为它是解释语言而且使用动态类型,所以可以在运行时做许多极其灵活的工作,而这在 Java 中是非常困难的。动态类型和表达语法所支持的神奇功能之一是,能够在 Ruby 中创建领域特定的语言,这使开发人员能够在更高的抽象级别上工作,从而脱离语言的“原始”语法。Ruby on Rails 是一个用于创建带后端数据库的 Web 应用程序的框架,它展示了这种优雅性。Rake(Make 和 Ant 相结合的 Ruby 版本)也展示了 Ruby 的这种强大能力。

    使用 Ruby 的另一个理由是,许多敏锐的开发人员已经开始使用它了。那些在 1996 年就认识到 Java 技术即将流行的开发人员(比如 Glenn Vanderburg、Bruce Tate 和 Martin Fowler)现在已经开始使用 Ruby。即使您还不打算全面转向 Ruby,现在也应该研究一下这种语言了。

    对于用 Ruby 进行广泛的开发,主要的限制因素之一是缺少一个出色的开发环境(对于那些不想学习 Emacs 的人来说尤其如此)。RDT 改变了这种状况。在您喜欢的 Eclipse IDE 中使用 Ruby,这会使您感到舒适。





    回页首


    准备

    在开始使用 Ruby 之前,必须安装(或者验证已经具有了) Ruby 解释器和库以及 Ruby Development Environment。

    获得 Ruby

    可以获得适合所有主流平台以及几个次要平台的 Ruby 版本。实际上,您的 Linux® 或 Cygwin 发行版可能已经包含了 Ruby。转到命令提示符下并输入 ruby -v

    如果看到一个版本号,就说明 Ruby 已经有了。如果没有看到版本号,就需要获取 Ruby。先寻找适合您平台的 发行版

    如果您正在使用 Windows®,就更容易了。RubyForge(与 SourceForge 功能相似)有一个称为 One-Click Ruby Installer 的项目,这个程序会在 Windows 上建立 Ruby 环境(参阅 参考资料)。它还包含几个工具,包括称为 FreeRide 的 IDE,但是如果使用 RDT,则可以不用理会大多数这些工具。





    回页首


    获得文档

    在开始使用一种新语言时,文档和其他参考资料是非常重要的。可以在 Ruby 主 Web 站点上获得 Ruby 文档的在线参考,但是您会发现这里的文档有点儿过时了(它针对 Ruby V1.6,而当前版本是 1.8.2)。这是因为最新的文档还没有从日文翻译成英文。但是在 Ruby-doc.org 上可以找到最新的文档。它包含 API 级文档(与 Javadoc 等同)以及一些教程和书籍。(参阅 参考资料。)

    如果您关心 Ruby 开发,那么应该尽快获得 Dave Thomas 和 Andy Hunt 撰写的 Programming Ruby: The Pragmatic Programmer's Guide(参阅 参考资料)。这是对 Ruby 的标准介绍并且介绍了 Ruby 库的需求。在阅读这本书的同时,还可以阅读 Dave Thomas 撰写的 Agile Development with Ruby on Rails,其中介绍了 Ruby on Rails。

    获得 RDT

    既然已经在计算机上安装了可以工作的 Ruby 版本并且获得了文档,现在就需要 RDT 了(参阅 参考资料)。这个 Eclipse 插件提供了许多特性,您在编辑代码时会慢慢熟悉这些特性。RDT 是一个标准的 Eclipse 插件,具有特性和插件,所以可以将 zip 文件直接解压缩到 Eclipse 文件夹。存档文件中的路径会建立目录结构。

    现在可以创建 Ruby 项目了(参见图 1):


    图 1. 创建新的 Ruby 项目
    创建新的 Ruby 项目

    与 Java 技术相比,Ruby 对名称和目录结构的要求宽松多了。在 Ruby 中创建一个项目实际上只是创建一个目录和一个 .project 文件(这里不需要 .classpath 文件,因为 Ruby 没有类路径)。与 Java 技术相比,另一个显著差异是 Ruby 项目向导并不创建显式的 srcbin 目录。Ruby 是解释语言,所以没有输出文件夹。如果项目比较小,那么可以将 Ruby 源代码文件与项目文件放在同一个文件夹中。也可以创建自己的目录结构。您会发现,与 Java 语言相比,Ruby 不太关心目录结构。

    接下来,需要一个 Ruby 源代码文件。没有专门用于创建 Ruby 源代码文件的向导。与 Java 技术不同,对于 Ruby 源代码文件的结构没有什么要求,所以要创建 Ruby 文件,只需使用项目的右击菜单创建一个新文件。


    图 2. 创建 Ruby 源代码文件
    创建 Ruby 源代码文件

    不要忘记在文件名后面加上标准的扩展名 .rb,这是一般的 Ruby 扩展名。创建 Ruby 文件应该会打开 Ruby 透视图。


    图 3. 创建 Ruby 源代码文件会打开 Ruby 透视图
    创建 Ruby 源代码文件会打开 Ruby 透视图

    Ruby 透视图还提供一个大纲视图,这与 Java 透视图提供的大纲视图相似。与 Java 大纲视图相似,它允许导航 Ruby 源代码文件的元素。在图 4 中,raise_salary_by 方法在大纲视图和源代码视图中高亮显示。


    图 4. 大纲视图允许在源代码文件中进行导航
    大纲视图允许在源代码文件中进行导航

    与其他复杂的插件一样,RDT 也在 Window > Preferences 对话框中增加了定制特性。这个首选项对话框如图 5 所示。


    图 5. RDT 的定制首选项
    RDT 的定制首选项

    首选项菜单项允许修改语法高亮显示方式、格式化(在 Ruby 中标准的缩进是两个空格,不是四个,所以要做某些调整)等等。它还允许定制编辑器模板以及选择解释器。





    回页首


    RDT 编辑器

    在 Java 技术环境中,我们已经习惯了高级的编辑器特性,这使我们在转移到没有提供这些特性的其他环境时不太适应。Ruby IDE 缺乏的特性之一是 Content Assist,这种特性针对标识符进行上下文相关的查找。RDT 编辑器对 Ruby 代码提供了 Content Assist。


    图 6. RDT 编辑器提供 Content Assist
    RDT 编辑器提供 Content Assist

    RDT 编辑器中的 Content Assist 没有 Java 环境中那么有针对性,因为 Ruby 支持动态类型。在 Ruby 中,不能将类型赋给变量或者方法返回值。标识符上下文在运行时决定类型。Ruby 使用所谓的“duck typing” —— 也就是说,如果它接受“鸭叫”消息,那么它一定是鸭子。对于那些习惯于强类型语言的人来说,这可能像是一种阻碍,但是这种弱类型耦合使 Ruby 语言能够实现某些更强大的特性。例如,在 Ruby 中可以编写一个异常处理程序,如果调用一个不存在的方法就会触发这个程序,这个异常处理程序可以动态地合成这个方法并且调用它。在强类型语言中很难实现这种元编程。

    Content Assist 弥补的特性之一是 Ruby 对标识符使用的特殊命名约定。例如,在 Ruby 中,所有成员变量在第一次使用时才存在,而且都由 @ 符号作为名称的第一个字符。如果使用 Content Assist 查找成员变量,那么可以输入 @,并且只看到成员变量。


    图 7. Ruby 中的命名约定帮助实现 Content Assist
    Ruby 中的命名约定帮助实现 Content Assist

    动态类型仍然会妨碍 Ruby 中的上下文敏感性。在图 7 中,合法的成员变量只是在上面方法声明中出现的成员变量,即 @name@salary@hire_year。Content Assist 挑选出的其他成员变量来自后面定义的另一个类。RDT 编辑器还不完善,无法过滤出所有语法上正确但是语义上不正确的条目。





    回页首


    运行和调试

    IDE 的关键特性之一是能够在构建应用程序的环境中对应用程序进行运行和调试。RDT 支持这两种功能。

    指定解释器

    Ruby 是一种解释语言,所以必须将一种解释器与环境相关联,然后 RDT 才能运行或调试应用程序。这种关联是在 Windows > Preferences 对话框中 Ruby 标题下面的 Installed Interpreters 项中设置的。


    图 8. 将 Ruby 解释器与环境关联起来
    将 Ruby 解释器与环境关联起来

    将“Location”文本域指向您使用的 Ruby 版本的 bin 目录。RDT 会找到所需的其他信息。关联了解释器之后,就可以运行应用程序了。

    运行 Ruby 应用程序

    运行 Ruby 应用程序与运行 Java 应用程序实际上完全一样。使用 Run 菜单创建一个 Run 配置。


    图 9. 在 RDT 中建立 Run 配置
    在 RDT 中建立 Run 配置

    在运行应用程序时,RDT 启动 Ruby 解释器并且在 Eclipse 工作区底部的一个控制台窗口中运行这个应用程序。


    图 10. 在 RDT 中运行 Ruby 应用程序
    在 RDT 中运行 Ruby 应用程序

    这个例子显示如何运行一个控制台应用程序,但是运行其他类型的应用程序(比如图形化应用程序)也是一样的。

    用 RDT 进行调试

    IDE 需要的最关键的特性之一是能够有效地调试应用程序。Ruby 解释器包含一个命令行调试器,但是在这个图形化工具的时代谁还想使用命令行调试器?幸运的是,Ruby 解释器还通过一个特定(可配置)的端口广播调试信息,RDT 这样的工具能够监听这个端口并且提供开发人员期望的调试支持类型。

    要调试 Ruby 应用程序,需要创建一个 Debug 配置,就像前面创建 Run 配置一样。然后,在左边的空白处点击以设置断点,并使用调试器启动应用程序。与 Java 技术一样,IDE 将询问您是否想切换到 Debug 透视图。回答之后,将看到下面这样的屏幕:


    图 11. 在 RDT 中调试 Ruby 应用程序
    在 RDT 中调试 Ruby 应用程序

    RDT 提供了与 Java 技术相同的调试支持级别。左上方的窗格显示当前正在执行的线程。右上方的窗格显示变量的值。与 Java 语言中一样,可以深入到对象中,查看它们的底层成员变量值。左边中间的窗格显示正在运行的应用程序的源代码,右边中间的窗格显示大纲视图(它在这里的工作方式与在编辑器中一样,让开发人员能够通过点击标识符来进行导航)。Debug 窗口的底部显示 Ruby 解释器在端口 1098 上广播调试信息,RDT 在这个端口上监听调试信息。

    调试支持是 RDT 的关键特性。即使您的编辑器有出色的 Ruby 支持,但是仍然必须依赖命令行调试器来调试应用程序。拥有一个功能全面的调试器可以显著提高生产效率。





    回页首


    测试

    对于 Java 开发人员,Ruby 最难掌握的特性之一是动态类型。如果您已经习惯了强类型语言,那么动态类型看起来可能会导致混乱。动态类型支持所有高级的元编程技巧,这在强类型语言中是很难实现的,甚至不可能。当然,还会失去编译时检查的安全保障。是否有办法同时获得这两种环境的优势呢?

    对于语言,单元测试是必需的,但是在动态语言中它特别重要。单元测试能够比单纯编译揭示出更多的问题。实际上,您应该换个角度看待单元测试和编译之间的关系。近来,在一个软件开发专家讨论会上,软件开发思想家 Relevance 公司的 Stuart Halloway 指出,“在 5 年内,我们将看到编译成为一种比较弱的单元测试形式。”单元测试检验代码是否做了开发人员希望它做的事儿,而不只是对类型进行拼写检查。

    既然单元测试在 Ruby 环境中如此重要,那么当然希望 RDT 可以使运行单元测试更容易。它确实做到了。单元测试已经包含在 Ruby 中,所以不需要下载任何额外的扩展代码。Ruby 库包含一个 TestCase 类和 TestSuite 的概念。可以像创建其他 Ruby 类一样创建单元测试,这需要对 Test::Unit::TestCase 进行子类化。清单 1 是一个称为 Employee 的示例类。


    清单 1. Employee

    				
    class Employee
      def initialize(name, salary, hire_year)
        @name = name
        @salary = salary
        @hire_year = hire_year
      end
      
      attr_reader :name, :salary, :hire_year 
      def raise_salary_by(perc)
        @salary += (@salary * (perc * 0.01))
      end
      
      def to_s
        "Name is #{@name}, salary is #{@salary}, " + 
        "hire year is #{@hire_year}"
      end
      
    end
    

    对应的单元测试是:


    清单 2. Employee 类的单元测试

    				
    require 'test/unit/testcase'
    require 'test/unit/autorunner'
    require 'hr'
    class TestEmployee < Test::Unit::TestCase
      @@Test_Salary = 2500
      def setup
        @emp = Employee.new("Homer", @@Test_Salary, 2003)
      end
      def test_raise_salary
        @emp.raise_salary_by(10)
        expected = (@@Test_Salary * 0.10) + @@Test_Salary
        assert( expected == @emp.salary)
      end
    end
    

    要运行这个单元测试,应该为单元测试类创建一个 Test::Unit 类型的 Run 配置。


    图 12. RDT 包含 Test::Unit Run 配置
    RDT 包含 Test::Unit Run 配置

    在运行这个测试时,可以获得与 Java 单元测试相同的支持元素,包括左下角与 JUnit 相似的面板。


    图 13. 在 IDE 中运行的单元测试示例
    在 IDE 中运行的单元测试示例

    在 Ruby 中还可以创建 TestSuites。TestSuites 是定义套件方法的 Ruby 类,这个方法返回 TestSuite。TestSuite 由在每个 TestCases 中自动定义的套件组成。清单 3 是两个类的 TestSuite 示例。


    清单 3. 两个类的 TestSuite 示例

    				
    require 'test/unit/testsuite'
    require 'test/unit/ui/tk/testrunner'
    require 'test/unit/ui/console/testrunner'
    require 'TestEmployee'
    require 'TestManager'
    class TestSuite_AllTests
        def self.suite
            suite = Test::Unit::TestSuite.new("HR Tests")
            suite << TestEmployee.suite
            suite << TestManager.suite
            return suite
        end
    end
    #Test::Unit::UI::Tk::TestRunner.run(TestSuite_AllTests)
    Test::Unit::UI::Console::TestRunner.run(TestSuite_AllTests)
    

    与前面运行单一 TestCase 的例子不同,套件作为单独的应用程序运行。Ruby 有两种显示 TestSuite 结果的方法。第一种是 Console Test Runner,它在控制台输出结果。第二种是 Tk TestRunner,它创建一个对话框来显示测试结果。Tk TestSuite 对话框见图 14。


    图 14. 图形化的 TestSuite 对话框
    图形化的 TestSuite 对话框




    回页首


    未来的发展

    RDT 的当前版本是 0.50。它的开发人员正在为下一个版本 0.60 而努力。下一个版本中计划的改进包括:

    • 代码折叠 —— 可以将类和方法的代码折叠起来。
    • 大纲视图 —— 更详细,支持局部变量。
    • RI 视图 —— 从 一个 RDT 视图使用 Ruby 的 ri 实用程序。
    • 任务标记 —— 在 Ruby 注释中为可配置的关键字(比如 TODO、FIXME)创建任务。
    • 编辑器改进 —— 自动补齐方括号、圆括号和单/双引号;更好的代码辅助。
    • 审查的快捷方式 —— 对 Debug 会话期间经常使用的审查提供可配置的快捷方式,比如显示对象的所有方法、全局变量,等等。

    下一个版本将更好地使用 JRuby 字节码编译器。JRuby 项目可以将 Ruby 代码编译为 Java 字节码。这意味着 RDT 的下一版本将更容易集成到 Eclipse 环境中,提供更好的支持。





    回页首


    结束语

    Pragmatic Programmer: From Journeyman to Master 一书中最出色的建议之一是:您应该每年学习一种新的编程语言从而跟上潮流,并且通过新语言学习一些新知识。Ruby 就快要广泛流行了,这在某种程度上是由于 Ruby on Rails 项目获得了成功。到了将 Ruby 加进您的工具库的时候了。RDT 是您掌握 Ruby 的好帮手。



     

    参考资料

    学习

    • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

    • Ruby 语言的官方站点 Ruby-lang.org 是通向其他 Ruby 站点和文档的门户。

    • Ruby on Rails 是一个有影响力的基于 Ruby 的 Web 应用程序框架。这个站点允许下载 rails 并且查看示例应用程序。

    • Rubyforge.org 提供 One-Click Ruby Installer,这个程序在 Windows 上建立 Ruby 环境。

    • Ruby-doc.org 上可以找到最新的 Ruby 文档。

    • Dave Thomas 撰写的 Programming Ruby, The Pragmatic Programmer's Guide, 2nd Edition 是 Ruby 语言的指南。这本书采用一种非常容易阅读的方式编写,是新接触 Ruby 的人的首选书籍。即使您不关心 Ruby,也应该阅读这本经典的软件工程著作。

    • 如果您对 Rails 感兴趣,那么 Dave Thomas 和 David Heinemeier Hansson 撰写的 Agile Development with Rails: A Pragmatic Guide 是不错的入门书。这本书明确地指导如何用 Rails 进行开发。

    • Andrew Hunt 和 David Thomas 撰写的 The Pragmatic Programmer: From Journeyman to Master 建议开发人员应该每年学习一种新语言。

    • Glenn Vanderburg 是一位软件思想家,常常提出有意思的观点。他是最先认识到并且宣传 Java 技术的潜力的人之一,他编写了最早的高级 Java 书籍,近几年他积极支持 Ruby。

    • Bitter JavaBitter EJB 的作者 Bruce Tate 也大力支持 Ruby 并且可能从 Java 技术转向 Ruby。他的几本书指导开发人员如何从 Java 人变成 Ruby 人。请阅读 developerWorks 上他的 “Secrets of lightweight development success” 系列。

    • Martin Fowler 是软件工程领域中最响亮的名字之一。他理解深奥的概念并且能够极其透彻地表述这些概念。几年来,他大力宣传 Ruby 的潜力,促使大家转向 Ruby。他常常在自己的 blog 上介绍 Ruby。

    • developerWorks 提供了许多 Ruby 文章和教程,包括 “调试 Ruby 程序技巧 101” 和 “用 Rake 自动执行任务”。

    • 请访问 developerWorks 的 开放源码专区,这里有丰富的 how-to 信息、工具和项目更新,可以帮助您利用开放源码技术进行开发并且将其用于 IBM 产品。


    获得产品和技术

    • 获得 Ruby Development Tools,这个 Eclipse 插件添加了 Ruby 支持,包括 Content Assist、调试和单元测试支持。

    • 可以从 Rubyforge.org 获得 Rake,这是 Ruby 的构建工具。Rake 提供一种用于执行构建的语言,提供了 Make 和 Ant 两者的优秀特性。它还展示了 Ruby 灵活的语法如何轻松地创建具有高度针对性的领域专用语言。

    • 使用 IBM 试用版软件 改进您的下一个开放源码开发项目,这些软件可以下载或者通过 DVD 获得。


    讨论

    转自:http://www.ibm.com/developerworks/cn/opensource/os-rubyeclipse/

  • Where are useful Ruby docs ?

    2009-09-22 15:07:28

    总结一下对研究Ruby很有用的网站。

    1. Ruby 官网: http://rubyforge.org/

    2. Manual for ruby gems: http://docs.rubygems.org/

    3. Manual for Ruby-oci8: http://ruby-oci8.rubyforge.org/en/

    4. Manual for Watir: http://wtr.rubyforge.org/rdoc/

     

  • 又找到一个好的DBI文档。

    2009-09-10 16:47:13

    有些例子,而且是中文的

    http://qzriso.javaeye.com/blog/451946
  • ruby如何调用excel

    2009-08-24 12:11:00

    require 'win32ole'

    def test_excel

      excel = WIN32OLE.new("excel.application")       #new a excel file

      excel.visible = true                            #if true, excel is visible

      workbook = excel.workbooks.open('D:\test.xls')  #open an existing excel file

      worksheet=workbook.worksheets("sheet1")         #locate to sheet1

      worksheet.Range('A1')['Value'] = "Name"         #fill name to cell A1

      workbook.save()                                 #save file

    end

  • ruby如何调用javascript

    2009-08-24 11:56:24

    要实现ruby调用javascript,只要扩展Watir下的IE类就可以解决啦。

    save as js_extension.rb

    module Watir
        class IE
            def execute_script(scriptCode)
                window.execScript(scriptCode)
            end

        end
    end

    require 'js_extension'  #调用前,先require

    ie.execute_script. "script"   

     

     

  • 如何实现ruby 访问 oracel很好的资料

    2009-07-23 17:19:22

    如何实现ruby 访问 oracel很好的资料

    http://developer.51cto.com/art/200704/45660_2.htm
  • Ruby如何对 window进行操作

    2009-02-18 12:08:47

    在ruby/watir测试ie时,经常会有popup windows窗口,如何对那些windows窗口实现操作呢?

    首先, require 'win32ole'。 这是windows的提供的接口。以下地址提供了每个function的用法:http://www.autoitscript.com/autoit3/docs/functions/ 

    其次,讲一下基本思路:

    1)new一个windows thread,

    2)得到pop up window的控制,

    3)操作window上的button.

    以 Export File 为例:

        def savefile(filepath)
           autoit = WIN32OLE.new('AutoItX3.Control')      

           loop do
           ret = autoit.WinWait('File Download',2)  # Look for window with given title. 
           autoit.ControlFocus("File Download", "", "[CLASS:Button; INSTANCE:2]")
           sleep 1
           autoit.ControlClick("File Download", "", "[CLASS:Button; INSTANCE:2]", 1)
           autoit.WinWait('Save As',2)
           autoit.ControlSend('Save As', '', '[CLASS:Edit; INSTANCE:1]',filepath)
           sleep 1
           autoit.ControlClick('Save As', '', '[CLASS:Button; INSTANCE:2]', 'left')
           sleep 1
           if ret ==1 then return() end
          end
     end

    调用方法:

        $ie.button(:id,'exportBtn').click_no_wait    #at this time, must use click_no_wait
        savefile('C:\file1.xls')

     

    最后,AutoIt Window Info,这个工具可以用来识别windows窗口上的对象。

     

     


     

  • 解决AutoItX3不能用的方法

    2008-07-02 16:02:06

    regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"

  • win32ole接口调用word

    2008-07-01 17:55:16

        刚开始是用File类来操作的,后来改的word输出。给出的这个脚本我用了Ruby来操作WIN32OLE来生成word文件。
    require 'win32ole'
    var_a=Array['A1','A2','A3']
    var_b=Array['B1','B2','B3']
    var_c=Array['C1','C2','C3']
    var_d=Array['D1','D2','D3']
    var_e=Array['E1','E2','E3']
    var_f=Array['F1','F2','F3']
    var_total=Array.new
    for a in (0..2)
           for b in (0..2)
                  for c in (0..2)
                    for d in (0..2)
                      for e in (0..2)
                        for f in (0..2)
                           var_total.push(var_a[a]+' | '+var_b+' | '+var_c[c]+' | '+var_d[d]+' | '+var_e[e]+' | '+var_f[f])
                   end
                 end
               end
             end
           end 
    end 
     
    word = WIN32OLE.new('word.application')
    word.visible=true
    word.Documents.Add()
    for i in(0..728)
           word.Selection.Font.Size=12
           word.Selection.Font.ColorIndex = 2
           word.Selection.TypeText(var_total[i]+"\n")
    end
    word.DefaultSaveFormat
    word.Documents.close()
     
    当然上面代码需要重新优化。。。word没有实现自动保存。。。以后再说。
    再次说明了Ruby是我们的好助手!
  • 运行Ruby时不显示browser方法

    2008-07-01 16:18:04

    Running Tests With the Browser Not Visible
    Run the tests with a "-b" option if you don't want the browser to be visible. ex. myTest.rb -b
  • watir中对table的操作

    2008-06-23 16:14:06

    在Watir中
    对于实例化的$ie对象,我们可以通过以下的两种方式来访问他的Table元素:
    t = $ie.table(:id,"data")
    t = Table.new($ie,:id,"data")
    同样,对于tr和td来说,分别也有以上两种方法:
    tr = $ie.row(:id,"title")
    tr = TableRow.new($ie,:id,"title")
    td = $ie.cell(:id,"name")
    td = TableCell.new($ie,:id,"name")
    Watir中Table,TableBody,TableRow,TableCell这几个类,都提供了一个索引方法"[](index)"来定位其下一层的子元素对象,该方法为实例方法,"index"为传入的参数,索引值从1开始,而非从0开始。
    用法如下:
    以table的第一行,第一个元素为例:
    tr1 = t.[](1)
    td1 = tr1.[](1)
    也可以连续访问:td1 = t.[](1).[](1)
    如果td中还有其他元素,可以通过td的实例方法直接访问,以checkbox为例:
    cb = td1.checkbox(:id,'navigate_id').click

    对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。
    如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。
    建议你先用flash方法定位一下要操作的元素。
    建议多查一下Watir的API Reference http://wtr.rubyforge.org/rdoc/

    我写的代码如下:

    def logOut()
    t=@ie.table(:id,"CoolMenu2menutable")
    @td_logout=t.[](1).[](16)
    end

    先找到Table,再索引TR,再索引到TD

    ===================================================

    t1 = t.[](1).[](1).to_s

    puts t1  # print the cell of 1 row and 1 col

     

     

  • watir教程实例

    2008-06-19 13:41:40

    watir教程实例
     
    开发测试案例(Developing Test Cases)
    1.打开编辑器
    2.以.rb为你的文件扩展名
    3.在测试文件的第一句写上“require 'watir'”,确保可以访问Watir工具。
    4.打开浏览器并转到要测试的应用
    5.与之交互并设计你的testcase
    6.在测试脚本中使用Watir方法
    7.验证结果

    与网页交互(Interacting With a Web Page)
    当使用Watir开发测试脚本的时候,通过给网页上的对象发送消息来与之交互。

    ie.text_field(:name , "q").set("bluescorpio")
    ie.button(:value , "Click Me").click


    Watir语法(Watir Syntax)
    1.使用Watir工具,需要在脚本中加上
    require 'watir'

    2.创建一个IE的测试实例
    ie = Watir::IE.new
    或者在创建的同时直接转到页面
    ie = Watir::IE.start("http://mytestsite";)
    Watir使用start方法同时创建一个浏览器实例并转到一个页面。

    3.页面导航
    ie.goto("http://mytestsite";)

    4.操纵Web页面对象
    4.1超链接
    4.1.1使用Text属性点击超链接
    ie.link(:text , "Pickaxe").click
    对应的HTML代码为:
    <a href="http://pragmaticprogrammer.com/titles/ruby/";>Pickaxe</a>
    4.1.2使用URL属性点击超链接
    ie.link(:url , "http://pragmaticprogrammer.com/titles/ruby/";).click
    对应的HTML代码为:
    <a href="http://pragmaticprogrammer.com/titles/ruby/";>Test Site</a>

    4.2复选框
    4.2.1使用name属性设置复选框
    ie.checkbox(:name, "checkme").set
    4.2.2使用name属性清除复选框
    ie.checkbox(:name, "checkme").clear
    4.2.3使用name和value属性设置复选框
    ie.checkbox(:name, "checkme", "1").set
    4.2.4使用name和value属性清除复选框
    ie.checkbox(:name, "checkme", "1").clear
    对应的HTML代码为:
    <input type = "checkbox" name = "checkme" value = "1">

    4.3单选框
    4.3.1使用name属性设置单选框
    ie.radio(:name, "clickme").set
    4.3.2使用name属性清除单选框
    ie.radio(:name, "clickme").clear
    4.3.3使用name和id属性设置单选框
    ie.radio(:name, "clickme", "1").set
    4.3.4使用name和id属性清除单选框
    ie.radio(:name, "clickme", "1").clear
    对应的HTML代码为:
    <input type = "radio" name = "clickme" id = "1">

    4.4下拉框
    4.4.1使用name属性和值来设置下拉框
    ie.select_list( :name , "selectme").select("is fun")
    4.4.2使用name属性和值来清除下拉框
    ie.select_list( :name , "selectme").clearSelection
    对应的HTML代码为:
    <select name = "selectme" > <option name=1> <option name=2>Web Testing <option name=3>in Ruby <option name=4>is fun </select>

    4.5在Web页面中输入数据

    4.5.1使用文本输入框的那么属性设置输入内容
    ie.text_field(:name, "typeinme").set("Watir World")
    4.5.2清空文本输入框
    ie.text_field(:name, "typeinme").clear
    对应的HTML代码为:
    <input type = "text" name = "typeinme" >

    4.6从Web页面上提交数据
    4.6.1按钮
    4.6.1.1通过值或标题属性点击按钮
    ie.button(:value, "Click Me").click
    4.6.1.2通过name属性点击按钮
    ie.button(:name, "clickme").click

    对应的HTML代码为:
    <input type = "button" name = "clickme" value = "Click Me">


    4.6.2表单
    4.6.2.1表单中的按钮
    使用value或标题属性
    ie.button(:value, "Submit").click
    对应的HTML代码为:
    <form. action = "submit" name = "submitform" method="post"><input type = "submit" value = "Submit"></input></form>

    4.6.2.2表单中的图片按钮
    使用那么属性
    ie.button(:name, "doit").click
    对应的HTML代码为:
    <form. action = "submit" name = "doitform" method="post"><input type="image" src = "images/doit.gif" name = "doit"></form>

    4.6.2.3没有按钮的表单
    Watir can submit a form. by identifying it by its name, action and method attributes.
    可以通过name、action以及method属性来提交表单
    ie.form(:name, "loginform").submit
    ie.form(:action, "login").submit
    对应的HTML代码为:
    <form. action = "login" name = "loginform" method="get"><input name="username" type="text"></input></form>

    4.6.3框架
    ie.show_frames可以打印出当前页面框架的数量和名称
    Watir允许通过名称属性来访问框架,如ie.frame("menu")
    如果要访问menu框架中的一个超链接,可以ie.frame("menu").link(:text, "Click Menu Item").click

    4.6.4嵌套框架
    ie.frame("frame1").frame(:name, "nested_frame")

    4.6.5新窗口
    一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。
    ie2 = Watir::IE.attach(:url, 'http://mytestsite')
    ie3 = Watir::IE.attach(:title, 'Test New Window')
    也可以使用正则表达式
    ie4 = Watir::IE.attach(:title, /Test New/)
    注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字

    5.验证结果
    比较好的方法是在测试案例中假如验证点
    5.1对象存在
    使用Watir方法contains_text
    ie.contains_text("Reached test verification point.")

    if ie.contains_text("Reached test verification point.")
       puts: "Test passed. Page contains the text: Reached test verification point."
    else
       puts: "Test failed! Page didn't contain text: Reached test verification point."
    end

    5.2使用test::unit Assertions
    5.2.1需要test::unit
    require 'test/unit'

    5.2.2创建测试实例
    class TC_myTest < Test::Unit::TestCase
       ...fill in Test Case methods here...
    end

    5.2.3创建测试用例方法
    在测试类中,需要声明象下面的方法:
    def test_myTestCase
       fill in method body with Watir code and assertion here
    end

    方法必须以test开头,ruby会随机运行测试案例,如果需要顺序执行,需要在test后加上字母或数字来强迫它顺序执行,比如“test_a_mytest”

    定义测试方法的类:
    class TC_myTest < Test::Unit::TestCase
       def test_ myTestCase
         Watir code and assertion here...
       end
       def test_anotherTestCase
         Watir code and assertion here...
       end
       def test_aTestCase
         Watir code and assertion here...
       end
    end

    5.2.4使用Assertions
    Watir通过在一个asert覆写Watir方法支持assertions。
    assert(ie.contains_text("Reached test verification point.")

    5.2.5Setup and Teardown
    def setup
       fill in code that will run before every test case here...
    end
    def teardown
       fill in code that will run after every test case here...
    end

    6.Tips and Tricks
    Running Tests With the Browser Not Visible
    Run the tests with a "-b" option if you don't want the browser to be visible. ex. myTest.rb -b
  • ruby基于IE的测试框架

    2008-06-18 11:39:02

    终于从实践中总结出一个适合基于IE的测试框架,Ruby+Watir+Excel 数据驱动+oracle。

    在windows下搭建日ruby测试框架。

    1. 先到Ruby官方网站http://rubyforge.org/frs/?group_id=167&release_id=28426下Ruby安装程序ruby186-26.exe。(下载one click installer - windows)

    2. 更新ruby到最新版本。Start->ruby->RubyGems Package Manager,打命令:gem update --system

    3。安装watir. 命令:gem install watir -v 1.6.2

    4. 如果要用Excel做数据驱动,安装win32ole。 命令:gem install win32-api -v 1.4.5, 或者 gem update win32-api

    5. 对于测试中对某些windows对象的操作(如对windows弹出框操作),就需要使用AutoIt。我们必须注册AutoItX3.dll, 在run中直接打命令:regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"

    6. 测试时需要把在Excel中准备好的测试数据自动导入Oracle,就需要装rubygem:dbi和oci8. 安装dbi时最好不要用命令:gem install dbi -v 0.4.2,可能是gem有BUG,安装后用require 'dbi', puts DBI::VERSION 看的话,会显示版本0.1.1。因此,最好的办法是到ruby网上下dbi-0.4.2.tar.gz—>解压—>cd dbi-0.4.2->用命令ruby setup.rb all安装。

    这样就可以随心所欲的auto testing啦!

Open Toolbar