2017-01-09 25 views
1

我的團隊正在爲一個新的Web應用程序使用AngularJs和Polymer組件。我正在研究如何爲此創建一個UI自動化套件。大量的研究看起來像量角器可能幫助我在這裏處理聚合物的一些調整。但是,當前的挑戰是如下 -在量角器中處理安全登錄頁面

  1. 我瀏覽到該應用程序
  2. 作爲我們公司的政策的一部分,每一個網站的訪問進行驗證(除非同一會話中)。以下是驗證的工作方式 -
    • 登錄頁面(非Anugular)頁面出現在輸入所需的url之後。使用憑據登錄
    • 出現另一箇中間頁面,等待頁面加載或單擊鏈接轉到下一頁。點擊鏈接
    • 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,這樣我可以與其他使用的驅動程序對象繼續測試。爲了測試,我記錄了「測試結束」消息並做了一個虛擬驗證。但是,看起來這兩條線不會被執行。

登錄到安全網站的作品,我看到頁面更改爲原始測試頁。我用Browser.pause()測試了它。但是,日誌「測試結束」從未發生過,也沒有發生過驗證。

  1. 我需要處理安全登錄頁面未出現的情況。不知道我需要在login.js中做什麼調整

頁面對象和處理承諾的方法在這裏是錯誤的嗎?當所有的代碼被放置在一個js文件下而不是將它們分割爲頁面對象時,我可以在測試應用程序頁面上進一步進行。請在這裏幫忙。

回答

0

我想與大家分享解決問題的「聚合物方式」。 下面用兩個元素的代碼,以監視URL中,驗證流程,參觀了以前的頁面和登錄用戶在輸入/輸出應用的

第一個將綁定到原點的路線,這樣你就可以發送用戶後面有

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

第二要結合authPage,讓您顯示/隱藏AUTH頁面。

<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

非常感謝Joel。我會試一試。 – samge