ruby+selenium-webdriver一步一步进行自动化测试(3)——面向对象编程

作者: tim_sheng
发布时间:2015-07-13 11:21:03

前一篇文章中写了一个测试用例,看上去还算不错。但是代码的扩展性并不好,假想对登录进行手动的功能测试,会想到哪些测试用例?(验证错误的用户名正确的密码;

用户名和密码为空直接点击登陆按钮。等等)是不是每个用例都要写一套代码呢?答案肯定是否定的。可以把登录的功能抽象成一个方法。进一步研究发现, 有些测试对象也是可以复用的,比如在登陆的时候我们会用到密码输入框、点击登录按钮等,可以把这些“基本动作”封装到一个类中,这样代码的灵活性和适用性 将会更强。即,面向对象编程。

因此做如下改造:

1.定义一个工具类,此工具类定义方法,各个方法分别用于获取登录连接、用户名、密码、登录按钮等元素;

2.定义一个实现类,此类中定义方法,方法目的是对获取的元素进行操作(点击、录入值等),对元素的操作组织登录方法;

3.建立测试用例进行测试;

改造方法:

1.D盘下新建test003文件夹

2.test003文件夹下新建三个文件夹,分别为action、tool、spec。其中action存放实现类,tool存放工具类,spec存放测试用例

3.action文件夹下新建文件login_main_page.rb;
tool文件夹下新建文件login_dialog.rb;
spec文件夹下新建文件login_spec.rb

4.login_dialog.rb文件中编写如下代码

module LoginDialog        def ua_link      @dr.find_element(:id,'ua').find_elements(:css,'a')    end        def login_link      ua_link[1]    end        def to_dialog_frame      begin        @dr.switch_to.frame('login_frame')      rescue        raise 'Can not switch to login dialog, make sure the dialog was open'        exit      end    end        def usr_field      @dr.find_element(:id => 'u')    end        def psd_field      @dr.find_element(:id => 'p')    end        def login_btn      @dr.find_element(:id => 'login_button')    end        def err_message     @dr.find_element(:id=>'err_m').text    end        def close_browser      @dr.close    end  end  

  5.login_main_page.rb文件中编写如下代码

require File.dirname(__FILE__)+'/../tool/login_dialog'  class LoginMainPage    include LoginDialog    def initialize(dr)      @dr ||=dr    end        def open_login_dialog      login_link.click      login_link.send_keys(:enter)      sleep 2    end        def login(username,password)      open_login_dialog      to_dialog_frame      usr_field.send_keys(username)      psd_field.send_keys(password)      login_btn.click    end  end  

  6.login_spec.rb文件中编写如下代码:

#encoding: utf-8  require "rspec"  require 'yaml'  require 'selenium-webdriver'      require File.dirname(__FILE__)+'/../action/login_main_page'  require File.dirname(__FILE__)+'/../tool/login_dialog'      describe "soso login" do    include LoginDialog    before(:all) do      @dr=Selenium::WebDriver.for :firefox      @url='http://www.soso.com'      @dr.get @url    end    before(:each) do          @login_element=LoginMainPage.new(@dr)    end        it "should return username and password is wrong" do      begin        @login_element.login("test","test")        err_message.should eql ("您输入的帐号或密码不正确,请重新输入。意见反馈")      ensure        close_browser      end    end  end   

  

7.命令行中输入命令:

cd D:\test003

rspec -f doc

看到如下结果:

soso login    should return username and password is wrong      Finished in 8.3 seconds  1 example, 0 failures  

  

来源:http://www.cnblogs.com/timsheng/archive/2012/09/12/2682632.h

推荐: