2017-01-09 2 views
1

私のチームは、新しいWebアプリケーションにAngularJsとPolymerコンポーネントを使用するように取り組んでいます。私はこれのためのUIオートメーションスイートを作成する方法を探しています。分度器のように多くの研究の後に、ポリマーを扱うためにいくつかの調整をして私を助けてくれるかもしれません。しかし、現在の課題は以下のとおりである -分度器の安全なログインページの処理

  1. は、私は私達の会社の方針の一環としてアプリ
  2. に移動し、すべてのWeb訪問が検証されます(同一セッション内でない限り)。検証の仕組みは次のとおりです。
    • 必要なURLを入力すると、ログインページ(非偶然性)ページが表示されます。資格情報でサインインしてください
    • もう1つの中間ページが表示され、ページが読み込まれるまで待つか、リンクをクリックして次のページに進みます。リンクをクリックしてください
    • URLは#1に使用されている元に戻されます 注:これらの検証ページは、読み込みにかなりの時間がかかります(異なる内部URLへの変更)。また、検証は(同じセッション内で、または他のいくつかのロジックを介し)時々

をスキップし、私はこれらすべてを処理するためのプロトタイプを設計するために苦労してきました。また、プロトタイプをデザインするときにPage Objectを使用しようとしています。ここまで私がこれまで持っていたことがあります。

ここ
login.js 
________________________________________________________ 

var currentUrl; 
var lastChangedUrl; 
var secureUrl = 'corplogin.ssogen2.corporate.company.com'; 
var getwayUrl = 'gateway.zscalertwo.net'; 


var loginSuite = function(driver) { 
var defer = protractor.promise.defer(); 

    describe('Handle login', function() { 

     /*afterEach(function() { 
      //driver.manage().deleteAllCookies(); 
     })*/ 

     //it('Login to security test', function(){ 

      //********** Wait for page to load/URL to change to secure login page ************ 
      driver.getCurrentUrl().then(function(url) { 
       currentUrl = url; 
      }).then(function() { 
       driver.wait(function() { 
        return driver.getCurrentUrl().then(function (url) { 
         lastChangedUrl = url; 
         return url !== currentUrl; 
        }); 
       }); 
      }).then(function() { 
       //********** login to secure page ************ 
       if (lastChangedUrl.indexOf(secureUrl) > -1 || lastChangedUrl.indexOf(getwayUrl) > -1) { 
        var element = driver.findElement(By.name("username")); 
        element.sendKeys("Username"); 

        element = driver.findElement(By.name("password")); 
        element.sendKeys("password"); //Give password 

        element = driver.findElement(By.name("submitFrm")); 
        element.click(); 
       } 
      }).then (function() { 
       //********** page is slow. wait for page to load/URL to change ************ 
       driver.getCurrentUrl().then(function(url) { 
        currentUrl = url; 
       }).then(function() { 
        driver.wait(function() { 
         return driver.getCurrentUrl().then(function (url) { 
          lastChangedUrl = url; 
          return url !== currentUrl; 
         }); 
        }); 
       }).then (function() { 
        //********** Click on the link to to go to test page *********** 

        if (lastChangedUrl.indexOf(getwayUrl) > -1) { 
         var element = driver.findElement(By.tagName("a")); 
         console.log("before click............"); 
         element.click(); 
        } 

        //********** page is slow. wait for page to load/URL to change ************ 
        driver.getCurrentUrl().then(function(url) { 
         currentUrl = url; 

        }).then(function() { 
         driver.wait(function() { 
          return driver.getCurrentUrl().then(function (url) { 
           lastChangedUrl = url; 
           return url !== currentUrl; 
          }); 
         }); 
        }) 
        .then (function() { 
         //return defer.promise; 
         //browser.pause(); 
        }); 
       }, 60000);     
      }); 
     //}); 
    }, 60000); 

return defer.promise; 
}; 

module.exports = loginSuite; 


spec.js 
___________________________________________________________________________ 

describe('Protractor Demo App', function() { 

var myUrl = 'http://<my test app url>/'; 
var driver = browser.driver; 

beforeEach(function() { 
    driver.get(myUrl); 
}); 



it('should login', function() { 

    loginSuite(driver) 
     .then(
      function(){ 

       console.log("End of tests:"); 
       expect(driver.getCurrentUrl()).toBe(myUrl); 

      }); 
}); 

問題 - ここ

私の期待は約束はセキュアなログインページが処理された後、私はドライバオブジェクトを使用して、他のテストを続けることができるようにspec.jsに戻り持つことです。私は、テストのために 'End of tests'メッセージを記録し、ダミー検証を行っています。しかし、その2つの行が実行されないように見えます。

安全なサイトにログインすると、元のテストページへのページの変更が表示されます。私はそれをBrowser.pause()でテストしました。しかし、ログの 'テストの終了'は決して起こらず、検証も行われません。

  1. 安全なログインページが表示されないシナリオを処理する必要があります。 login.jsページでどのような調整が必要かわからない

私のアプローチはページオブジェクトであり、約束事をここで処理するのは間違っていますか?私はすべてのコードがページオブジェクトのためにそれらを分割するのではなく、1つのjsファイルの下に置かれているとき、テストアプリのページでさらに一歩進んで行くことができます。ここで助けてください。

答えて

0

私はあなたの問題を解決する「ポリマー的方法」をあなたに伝えたいと思っていました。 使用以下のコードの二つの要素URL、認証の流れ、訪問前ページを監視し、ユーザのログを記録する中/アプリのうち

ユーザーを送信できるように、第1には、元のルートにバインドしますそこに戻って

<app-route 
    route="{{route}}" 
    pattern="/origin/:page" 
    data="{{data}}" 
    tail="{{subroute}}"> 
</app-route> 

二つ目は、あなたが認証ページを表示/非表示することができ、authPageにバインドします。
使用して、要素リダイレクト

<app-route 
    route="{{subroute}}" 
    pattern=":authPage" 
    data="{{data}} 
    active="{{authPageActive}}"> 
</app-route> 

ユーザー認証、監視やページ:<firebase-auth>
は、観察者の追加に?:signedIn="{{isSignedIn}}"

<firebase-auth id="auth" user="{{user}}" provider="google" on- 
error="handleError" signedIn="{{isSignedIn}}"></firebase-auth> 

singnedユーザーです

observers: [ 
    '_userSignedInStatus(isSignedIn)' // observe the user in/out 
    ], 

関数を追加する

_userSignedInStatus: function (isSignedIn) { 
if (isSignedIn === false) { 
    this.page = 'view404'; // redirect the user to another page 
          // import an element that cover the view 
} else { 
          //send a log message to your database 
    } 
} 
+0

ありがとうございました。私はそれを試してみましょう。 – samge