Транспортир, имеющий дело с обещаниями и массивами в управлении потоком - PullRequest
0 голосов
/ 20 марта 2019

Я работаю над некоторым комплексным тестированием Jasmine, используя тестовый прогон Protractor. Приложение, которое я тестирую, представляет собой простую веб-страницу. У меня уже есть тестовый сценарий, который отлично работает.

Теперь я хотел бы улучшить свой код, чтобы я мог использовать один и тот же сценарий для запуска сценария тестирования дважды.

  • Первый раз: тест будет выполнен на английской версии страницы
  • Второй раз: на переведенной версии той же страницы.

Вот мой код:

var RandomSentenceInThePage = ["Sentence in English", "Phrase en Francais"];
var i;
var signInButton;
var TranslationButton;
var RandomSentenceInThePageBis;
i = 0;
//Runs the testing scenario twice
while (i < 2) {
  describe('TC1 - The registration Page', function() {
    //the translation is done on the second iteration
    if (i != 0) {
      beforeEach(function() {
        browser.ignoreSynchronization = true;
        browser.get('https://Mywebsite.url.us/');
        //we get the translation button then click on it
        TranslationButton = element(by.css('.TranslationButtonClass'));
        TranslationButton.click();
      });
    }
    //On the first iteration, we run the test on the not translated page…
    Else {
      beforeEach(function() {
        browser.ignoreSynchronization = true; //Necessary for the browser.get() method to work inside the it statements.
        browser.get('https://Mywebsite.url.us/');
      });
    }

    it('should display the log in page', function() {
      //Accessing the browser is done in the before each section
      signInButton = element(by.css('.SignInButtonClass'));
      signInButton.click();

      RandomSentenceInThePageBis = element(by.css('.mt-4.text-center.signin-header')).getText();
      /*******************[HERE IS WHERE THE PROBLEM IS]*******************/
      expect(RandomSentenceInThePageBis.getText()).toEqual(RandomSentenceInThePage[i]);
    });
    /*******************************************************************/
  });
}

Я выделил проблемный раздел. Код продолжает работать даже перед сравнением между RandomSentenceInThePage [i] и RandomSentenceInThePageBis. И когда они, наконец, сравниваются, цикл уже завершен.

Согласно тому, что я видел в других смежных темах, из-за использования операторов ожидаемого и методов getText () я имею дело с обещаниями и должен ждать их разрешения. После целого дня, я думаю, я мог бы использовать подсказку о том, как справиться с этим обещанием резолюции. Дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 20 марта 2019

Измените цикл while на цикл for и объявите переменную: i на let вместо var

let может объявить переменную в области видимости блока кода, например for, if block и т. Д. Но var не может.

Поскольку транспортир api выполняет асинхронное выполнение, то есть, когда expect()... выполняется во второй раз. значение i стало 2, а не 1

for(let i=0;i<2;i++) {

  describe('TC1 - The registration Page', function() {
     ....
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...