2017-10-04 8 views
0

私は非角形アプリケーションへのログインテストを書いています。完成度の高いページの読み込みが予期したとおりに動作しません

describe('login Test for App', function() { 

    beforeEach(function() { 
     browser.ignoreSynchronization=true; 
     browser.get(loginPageURL,2000); 
    }); 


    it('It should Login a User', function() { 
     element(by.id('username')).sendKeys(constants.userName); 
     element(by.id('password')).sendKeys(constants.password); 
     element(by.id('Login')).click().then(function() { 
      // Waiting to open modal 
      browser.wait(function() { 
       return browser.getCurrentUrl().then(function (url) { 
        return url==dashboardUrl; 
       }); 
      }); 
     }); 
    }); 
}); 

ログイン後、currentUrlをチェックします。しかし、ログインボタンをクリックすると、ダッシュボードのURLが現れるまで待ちます。 しかし、ログインボタンをクリックした後、別のURLに行くと、ダッシュボードのURLも無限に待っています。 ログインテスト後に現在のURLを確認したい場合は、ダッシュボードのURLでない場合は失敗し、次のテストスイートのケースは実行しないでください。

Like-

クリックするとログインボタンが表示されます。

  1. ページが完全に読み込まれるまで待ちます。

2.現在のURLを確認します。ダッシュボードのURLでない場合、テストは失敗し、テストケースは続行されません。

答えて

1

リダイレクトなどがある可能性があるため、ページがロードされているかどうかを知るために、ロードするページを待つことはお勧めしません。

次のページの特定の要素(ログイン後)を待つことがベストプラクティスです。ここにあなたのコードは、現在のURLを取得するために、続行する前に表示されるように要素を待ちますカスタム待機()機能を使用するようにリファクタリングされています

describe('login Test for App', function() { 
    browser.ignoreSynchronization = true; 

    it('should load the log-in page', function(done) { 
     browser.driver.get(loginPageURL).then(function() { 
      browser.driver.sleep(2000); 
      wait('#username', 10000); 
      done(); 
     }); 
    }); 

    it('It should Login a User', function (done) { 
     element(by.id('username')).sendKeys(constants.userName); 
     element(by.id('password')).sendKeys(constants.password); 
     element(by.id('Login')).click().then(function() { 
      // Waiting to open modal 
      wait('#element_on_the_next_page', 10000); 

      browser.getCurrentUrl().then(function (url) { 
       // do anything with the url 
       done(); 
      }); 
     }); 
    }); 

    function wait(selector, timeout) { 
     browser.driver.wait(function() { 
     return browser.driver.isElementPresent(by.css(selector)).then(function(present) { 
      return present; 
     }); 
     }, timeout); 
     browser.driver.wait(function() { 
     return browser.driver.findElement(by.css(selector)).isDisplayed().then(function(displayed) { 
      return displayed; 
     }); 
     }, timeout).then(function() { 
     return; 
     }); 
    } 
}); 

ホープ、このことができます!

+0

十分に近いですが、タイムアウト後に、その要素が表示されていない場合は、それ以上のテストスイートを使用しません。私のログインテストが失敗したためです。どうやってするか?今すぐログインテストが失敗すると、conf.jsのspecプロパティで定義したテストスイートが続きます –

+0

この回答をチェックして、最初の失敗後にスイートに失敗したら、 https://stackoverflow.com/a/34462368/5623572 – GoLGo13

関連する問題