zoukankan      html  css  js  c++  java
  • ruby+seleniumwebdriver一步一步进行自动化测试(3)——面向对象编程

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

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

    因此做如下改造:

    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
    

      

  • 相关阅读:
    [奇葩问题] Error Domain=NSURLErrorDomain Code=1003
    [linux] vim在源代码中自动添加作者信息(转载)
    [shell] 循环判断输入值
    [redis] linux下主从篇(2)
    [shell] sed学习
    [linux] 查看网卡UUID
    [笔记] centos6.6编译安装httpd2.4.10
    [笔记] postgresql 流复制(streaming replication)
    ORA28000: the account is locked 查哪个具体ip地址造成
    网易客户端授权密码,errormsg='authentication failed (method LOGIN)' exitcode=EX_NOPERM
  • 原文地址:https://www.cnblogs.com/timsheng/p/2682632.html
Copyright © 2011-2022 走看看