Транспортир: Как правильно ждать после клика? - PullRequest
0 голосов
/ 20 января 2020

Я использую транспортир для тестирования e2e. Тесты должны сначала ввести слишком короткие имя пользователя и пароли и из-за Angular валидаторы при нажатии на кнопку отправки (которая отключена) отклоняются и остаются на месте (это работает!), Затем должны вводить имя пользователя правильной длины с также пароль правильной длины, нажмите на кнопку отправки и НЕ получите перенаправление, потому что это ложный логин. Это не удается ... Последний тест требует ввода правильных данных для входа в систему и нажатия кнопки «Отправить». Он должен быть перенаправлен на панель инструментов. Согласно этому ответу { ссылка } - это все, что нужно для решения моей проблемы, которая, похоже, выдает ошибку

- Failed: script timeout
    (Session info: chrome=79.0.3945.130)
    (Driver info: chromedriver=79.0.3945.16 (93fcc21110c10dbbd49bbff8f472335360e31d05-refs/branch-heads/3945@{#262}),platform=Windows NT 10.0.18362 x86_64)```

для обоих моих тестов. Как я могу это исправить? Мои тесты написаны следующим образом:

it('should enter too short username and password and NOT get redirected => stay put', () => {
   element(by.css('#inputUser')).sendKeys('bah');
   element(by.css('#inputPassword')).sendKeys('bah');
   const btn = element(by.css('#loginSubmit'));
   btn.click();
   const curUrl = browser.getCurrentUrl();
   expect(curUrl).toBe('http://localhost:4200/avior/login');
 });

  it('should enter incorrect username and password and NOT get redirected => stay put', () => {
    const ele1 = element(by.css('#inputUser'));
    const ele2 = element(by.css('#inputPassword'));
    const btn = element(by.css('#loginSubmit'));
    ele1.clear();
    ele2.clear();
    ele1.sendKeys('bah');
    ele2.sendKeys('bahbahbah');
    btn.click();
    browser.waitForAngular();
    const curUrl = browser.getCurrentUrl();
    expect(curUrl).toBe('http://localhost:4200/avior/login');
  });

  it('should enter correct username and password and get redirected to /avior/dashboard', () => {
    const ele1 = element(by.css('#inputUser'));
    const ele2 = element(by.css('#inputPassword'));
    const btn = element(by.css('#loginSubmit'));
    ele1.clear();
    ele2.clear();
    ele1.sendKeys('Chad');
    ele2.sendKeys('chadchad');
    btn.click();
    browser.waitForAngular();
    const curUrl = browser.getCurrentUrl();
    expect(curUrl).toBe('http://localhost:4200/avior/dashboard');
  });

ОБНОВЛЕНИЕ Токен jwt отправляется как повар ie в ответ, что может быть частью проблемы. Кажется, я не могу найти в Интернете информацию о том, как обращаться с файлами cookie с помощью транспортира.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Ожидание в транспортире

Ожидание представления элемента

this.waitForElementPresent = function (element) {
    return browser.wait(() => (element.isPresent()), 30000);
}

Ожидание отображения элемента

 this.waitForElementDisplayed = function (element) {
    return browser.wait(() => (element.isDisplayed()), 30000);
}

Состояние сна

this.sleep = function (sec) {
    browser.sleep(sec * 1000);
}

Ожидаемые условия

this.waitForElementVisibility = function () {
    let EC = ExpectedConditions;
    return browser.wait(EC.visibilityOf(), 30000);
}
0 голосов
/ 21 января 2020

По этому вопросу Сбой: время ожидания сценария: результат не был получен за 11 секунд. От: Задача: Protractor.waitFor Angular () - Локатор: По (css селектор, # my-btn) добавление browser.waitForAngularEnabled(false); до того, как нажатия кнопок, кажется, устранили ошибки ..

...