web-dev-qa-db-fra.com

Pourquoi dois-je utiliser browser.sleep lors de l'écriture de tests de rapporteur

Ma première course aux tests E2E. J'essaie de digérer les tests du rapporteur de quelqu'un d'autre.

Problème: Il y a beaucoup de browser.driver.sleep et cela semble fragile.

Objectif: ne pas utiliser browser.driver.sleep

Question: Quelle est la meilleure approche de browser.driver.sleep? Quelque chose de moins fragile comme une promesse ou quelque chose que je ne connais pas lol?

var config = require('../../protractor.conf.js').config;
describe('this Homepage Body Tests', function(){
browser.driver.get(config.homepageUrl);

it("should open find a clinic page", function(){
  // page loads :: want to fix this random wait interval 
  browser.driver.sleep(2000);
  browser.ignoreSynchronization = true;

  var string = 'clinic';
  var main = '.search-large-text';
  var link = element(by.cssContainingText('.submenu li a', string));

  link.click().then(function() {
    // page reloads :: want to fix this random wait interval
    browser.driver.sleep(3000);
    var title = element(by.cssContainingText(main, string));
    expect(title.getText()).toBe(string);
  });
});
});
18
Matthew Harwood

Puisqu'un ignoreSynchronization est activé, vous ne pouvez pas utiliser waitForAngular(), ce qui serait une solution en cas de test de site angulaire.

Une meilleure solution ici serait de définir un délai de chargement de page :

browser.manage().timeouts().pageLoadTimeout(10000);  // 10 seconds

Voir également ces discussions pertinentes sur les attentes et les délais d'attente explicites:

11
alecxe