«Элемент не найден с помощью локатора ...» при тестировании e2e с огурцом - PullRequest
1 голос
/ 07 апреля 2019

Я получаю следующий сбой в некоторых функциях Cucumber: «NoSuchElementError: Элемент не найден с помощью локатора: By (css selector, h1)»

Я попытался установить большее время ожидания, чтобы дать Cucumber большевремя, чтобы найти элементы, но это не похоже на работу

Вот основные компоненты теста: cardTitle.feature:

@cardTitle-feature
Feature: See card title
  Display the card title

  @cardTitle-scenario
  Scenario: Card Page
    Given I am on the card page
    When I do nothing
    Then I should see the card title

app.steps.ts:

// Go to the card - Display the title
Given(/^I am on the card page$/, async () => {
    await page.navigateToCard();
});

When(/^I do nothing$/, () => {
});

Then(/^I should see the card title$/, async () => {
    expect(await page.getCardTitleText()).to.equal('Profile');
});

app.po.ts:

navigateToCard() {
        this.sleep(3000);
        return browser.get('/card');
    }

getCardTitleText() {
        this.sleep(3000);
        return element(by.css('h1')).getText();
    }

card.html:

<div class="profile-container">
  <!-- EXAMPLE TOP NAV -->

  <h1>Profile</h1>
...

Я думаю, что это может произойти, потому что "карта" может быть недоступна безвойдите в приложение.Если это проблема, как я могу выполнить тест, который входит в приложение, а затем проверяет элемент «h1»?Спасибо!

1 Ответ

0 голосов
/ 07 апреля 2019

Отлично, пишите!Спасибо за все детали, это очень помогает.Вот мои мысли:

  • Разве вам не нужно await спящие объекты на вашей странице?Или обещали связать sleep с get, если по какой-то причине вы избегаете асинхронных функций в объекте страницы.
  • Учитывая, что вы используете транспортир, и, по-видимому, это угловое приложение,Я удивлен, что тебе вообще нужны сны.Обычно встроенный waitForAngular, который запускается как часть каждого browser.get, должен дождаться полной загрузки страницы, прежде чем продолжить
  • Ваш css выглядит отлично, что должно работать просто отлично.Вы можете найти html-теги и атрибуты с помощью css.
  • Я предполагаю, this.sleep - это метод в базовом классе объекта вашей страницы или что-то в этом роде?Я как бы ожидал browser.sleep.

Кстати, я получил много пробега от псевдонимов $ и $$ в транспортире, они такие чистые.Вы можете сократить

return element(by.css('h1')).getText();

до

return $('h1').getText();

Если вы предпочитаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...