web-dev-qa-db-fra.com

Protractor e2e teste la redirection de connexion

Ont actuellement un test de bout en bout partiel qui entre un nom d'utilisateur/mot de passe et clique sur "se connecter".

Il le fait avec succès, mais se termine sur une page "merci d'être connecté", au lieu d'être redirigé vers le "portail de compte" ou le "tableau de bord", comme si je me connectais via le navigateur. \

Nouveau dans ce projet mais nous utilisons OAuth.

Question principale: cela ressemble-t-il à un besoin de se moquer de http?

Plus de détails:

spec.js

describe('login page', function() {
    browser.driver.get('http://url.path/login');
    it('should render login page', function() {

      // Checking the current url
      var currentUrl = browser.driver.getCurrentUrl();
      expect(currentUrl).toMatch('/login');
    });
    it('should sign in', function() {

      // Find page elements
      var userNameField = browser.driver.findElement(By.id('username'));
      var userPassField = browser.driver.findElement(By.id('password'));
      var userLoginBtn  = browser.driver.findElement(By.id('loginbtn'));

      // Fill input fields
      userNameField.sendKeys('[email protected]');
      userPassField.sendKeys('1234');

      // Ensure fields contain what we've entered
      expect(userNameField.getAttribute('value')).toEqual('[email protected]');
      expect(userPassField.getAttribute('value')).toEqual('1234');

      // Click to sign in - waiting for Angular as it is manually bootstrapped.
      userLoginBtn.click().then(function() {
        browser.waitForAngular();
        expect(browser.driver.getCurrentUrl()).toMatch('/success');
      }, 10000);
    });
});

Si je clique rapidement sur la fenêtre de test, je peux voir qu'elle atteint avec succès la page `` succès '' - mais elle ne redirige pas vers le tableau de bord (elle redirige lorsque vous vous connectez manuellement, via le navigateur). Comment puis-je continuer ce test pour rester connecté et accéder au tableau de bord comme le ferait un utilisateur?

// Nouveau dans le projet, angular et et rapporteur.

EDIT - Résumant cela un peu:

  • J'aimerais que le rapporteur commence les tests sur la page /login
  • Le rapporteur doit rechercher et remplir les champs du nom d'utilisateur et du mot de passe, puis cliquer sur Connexion
  • Le rapporteur s'est connecté avec succès, pour voir une page /merci , puis rediriger immédiatement vers l'utilisateur /tableau de bord page
  • Peut-être que je manque une étape, devons-nous rediriger manuellement dans les tests Protractor?

(Lorsqu'un utilisateur se connecte manuellement via le navigateur, il ne voit pas la page /thankyou - c'est une redirection rapide vers /tableau de bord . Le rapporteur n'atteint pas la page du tableau de bord.

15
bruh

Votre message manque d'informations, mais je vais essayer de faire une hypothèse:

Je soupçonne que votre page "merci d'être connecté" fait rediriger javascript après un délai d'attente.

Donc, après avoir cliqué sur "Connexion", le navigateur charge la page "merci d'être connecté", et puisque le deuxième paramètre de .then() ne fait rien, browser.waitForAngular() échoue car il n'y a pas = angular sur cette page.

Vous devriez essayer d'utiliser quelque chose comme browser.driver.wait() avec un délai raisonnable pour détecter le changement d'url (décrit ici: https://github.com/angular/protractor/issues/61 ) et déclencher browser.waitForAngular() une fois que le navigateur est arrivé à /success page.

7
Eugene

Avez-vous essayé d'utiliser une attente explicite?

    return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /success/.test(url);
        });
    }, 10000);

Votre code serait comme ça:

  // Click to sign in - waiting for Angular as it is manually bootstrapped.
  userLoginBtn.click();
  return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /success/.test(url);
        });
  }, 10000);
2
flaviomeira10