2017-03-08 1 views
1

Je souhaite conserver la variable en dehors de la fonction getText(), de sorte que je puisse la faire correspondre aux dernières valeurs dans les tests. Exemple:Protractor: conserve la variable en dehors de la fonction getText()

page fichier objet:

this.numberOfAllLines = element(by.id('all_lines')); 
this.tableCell = element(by.css('.table_results_lines')); 
this.sumOfAllLinesText = element(by.id('sum_lines')); 

fichier Spec:

var numberOfLines = ''; 
var newNumberOfLines = ''; 

describe(... 
    it(... 
     page.numberOfAllLines.getText().then(function(num) { 
      numberOfLines = num; 
     }); 

     newNumberOfLines = numberOfLines + 10; 

     expect(page.tableCell.getText()).toEqual(newNumberOfLines); 

     // doing some clicks 

     expect(page.sumOfAllLinesText.getText()).toEqual(newNumberOfLines); 
    }); 
}); 

Cela ne répond pas à How do I return the response from an asynchronous call?.

Répondre

1

Ce morceau de code newNumberOfLines = numberOfLines + 10 est asynchrone et s'exécutera avant même l'affectation de numberOfLines = num;.

Ce que vous faites est correct. Avoir une variable globale qui contient la valeur à comparer. Mais avoir le code d'affectation dans la promesse chaînée de getText().

it(... 
     page.numberOfAllLines.getText().then(function(num) { 
      numberOfLines = num; 
      newNumberOfLines = numberOfLines + 10; 
     }); 

     expect(page.tableCell.getText()).toEqual(newNumberOfLines); 
+0

Je suis toujours un tel noob. Merci, cela a résolu mon problème! – jurijk

+0

Ouais .. async est toujours délicat :) – AdityaReddy

+0

Savez-vous comment je peux multiplier les valeurs de getText() fonctions dans cet exemple. { \t 'page.numberOfAllLines.getText() puis (fonction (de num) NumberOfLines = num; }); page.winPrice.getText(). Then (fonction (prix) { \t coût = prix; }); prixSum = numberOfLines * coût; attend (page.tableCell.getText()) .Equal (priceSum); 'Est-ce que cela est même possible en raison de la nature asynchrone de Protractor? – jurijk