1

Watir Splashフレームワークを使用してWebアプリケーションをテストしており、2つのページクラスを設定しています。1つ目は、ここで詳しく説明されている「ログイン」ページです。

module App
 module Page
 class Login < WatirSplash::Page::Base
  url "http://[removed].com"

    def login_btn
        modify button(:id => 'btnLogin'), :click => lambda {redirect_to VehicleSelection}
    end

他のページクラスは「車両選択」ページです。ログインに成功した後、車両選択ページオブジェクトがRSpecで使用できるようにするために、ここのドキュメントに示されているようにmodifyメソッドを使用しました。

しかし、ログインが失敗した場合はどうなりますか?認証が正しく機能していることを確認するために、意図的に誤った情報をログインフォームに入力するテストケースがいくつかあります。RSpecは、テストケースを完了するために正しい要素にアクセスするために、「Login」クラスで定義されたメソッドを必要とします。この場合、メソッド「VehicleSeleciton」オブジェクトを指定した方法が関係なく返されます。(またはそう表示されます)

どんな助けでも大歓迎です。また、特に参照できるサンプルコードが他にもある場合は、フレームワークをテストするための他の提案を受け入れることができます。

4

2 に答える 2

2

以下は私が試したいくつかのアプローチです。私はWatirSplashフレームワークを使用していませんでしたが、同じ概念が適用されました(ただし、試行されたWatirSplashサンプルコードは100%正確ではない可能性があります)。

解決策1:ページオブジェクトを返す

私の個人的な好みは、ページオブジェクトがページオブジェクトを返さないようにすることです。代わりに、テスト内の各ページオブジェクトの明示的な初期化を読んだり操作したりする方が簡単だと思います。アリスタースコットは彼のブログでこれについて議論しました。

テストは次のようになります。

#For login successful tests
page = App::Page::Login.new
page.login_btn.click
page = App::Page::VehicleSelection.new  #The VehicleSelection page is explicitly initialized
page.validate_page #or whatever you want to do with the page

#For login failed tests
page = App::Page::Login.new
page.login_btn.click
page.validate_page #or whatever you want to do with the page

解決策2:ログイン用の複数のメソッドを作成する

もう1つの解決策は、2つのログイン方法を作成することです。1つは成功したログイン用で、もう1つは失敗したログイン用です。

ページオブジェクトは次のようになります。

module App
    module Page
        class Login < WatirSplash::Page::Base
            url "http://[removed].com"

            def login(user, password)
                #Do whatever code to input name and password and then click the button

                #Then redirect to the VehicleSelection page since that is where you will want to go most often
                redirect_to VehicleSelection
            end

            def login_failed(user, password)
                login(user, password)               

                #Return the Login page (instead of the VehicleSelection page).
                redirect_to Login
            end
        end
    end
end

テストは次のとおりです。

#For login successful tests
login_page = App::Page::Login.new
vehicle_page = login_page.login(user, password)
vehicle_page.validate_page #or whatever you want to do with the Vehicle Selection page

#For login failed tests
login_page = App::Page::Login.new
login_page.login_failed(user, password)
login_page.validate_page #or whatever you want to do with the Login page

解決策3:ボタンがどこに向かっているのかを知らせる

別の解決策は、ログインボタンにリダイレクト先のページを認識させることです。

ページオブジェクトは次のようになります。

module App
    module Page
        class Login < WatirSplash::Page::Base
            url "http://[removed].com"

            def login_btn(login_successful=true)
                if login_successful
                    modify button(:id => 'btnLogin'), :click => lambda {redirect_to VehicleSelection}
                else
                    modify button(:id => 'btnLogin'), :click => lambda {redirect_to Login}
                end
            end
        end
    end
end

テストは次のとおりです。

#For login successful tests
login_page= App::Page::Login.new
vehicle_page = login_page.login_btn.click
vehicle_page.validate_page #or whatever you want to do with the Vehicle Selection page

#For login failed tests
login_page= App::Page::Login.new
login_page.login_btn(false).click
login_page.validate_page #or whatever you want to do with the Login page
于 2012-11-29T18:10:22.197 に答える
1

私の宝石WatirSplashを試していただきありがとうございます。私は解決策#2の行に何かを書いたでしょう-例えば、成功したログインと失敗したログインのために2つの別々のメソッドを作成します。ジャスティンのように、どちらの方法でも使用#modifyする必要はありません。

また、代わりに他のgemテストページを使用することをお勧めします。これはWatirSplashのページオブジェクトとほぼ同じですが、別のgemに抽出されます-WatirSplashは、すべてのために長期的に非推奨になりますそのパーツの一部が別々の宝石に抽出され、各プロジェクトで必要な機能をより適切に制御できます。

于 2012-11-29T19:43:55.080 に答える