Frontend e2e test - как определить, что карта google инициализирована на селене?

Я делаю тестирование внешнего интерфейса e2e с использованием WebDriverIo(4.13.2) с CucumberJs.

И я совсем новичок в тестировании e2e.

Мое приложение использует карту Google и есть маркеры карты.

В основном, мое тестирование e2e хочет сделать:

  • Подождите, пока не будет инициализирован компонент карты Google
  • Поиск маркера карты Google DOM по browser объект из WebDriverIo
  • Если маркер существует, пройдите тест

Проблема в том, что инициализация карты Google требует времени.

Иногда это занимает больше 30 секунд на Selenium. Таким образом, второй сценарий терпит неудачу. (Тайм-аут)

я пытался browser.pause(30000);, Итак, Selenium ждет 30 секунд.

Но это все равно не удается, зависит от того, насколько быстро Google Map ответит. Более того, я не думаю, что ожидание 30 секунд - это идеальное решение.

Ниже приведен тестовый код.

Мой сценарий:

...
Then I should see map
And I should see map marker
...

Мой шаг:

Then('I should see map', async () => {
  const path = 'my-page map-component';

  myPage.mapComponent.waitForShadowDomElement(path);

  // Wait for 30 seconds
  browser.pause(30000);
});

Then('I should see map marker', async () => {
  const path = 'my-page ${page}'

  // Get marker img src
  const marker = await browser.getAttribute(`${path} #map img[src*="marker"] img`, 'src');

  assert.isTrue(marker.includes('marker-img.svg'));
});

я думал так myPage.mapComponent.waitForShadowDomElement(path); недостаточно дождаться инициализации карты Google, потому что она ждет только обложки карты.

У меня тоже есть тест вроде browser.waitForVisible(MAP_PATH);,

Но не повезло.

Как я могу дождаться полной загрузки карты Google на WebDriverIo?

Спасибо!!

К вашему сведению, во внешнем интерфейсе я использую компонент Polymer, который WebDriverIo не может обнаружить.

Поэтому я использую стороннюю библиотеку wdio-webcomponents.

1 ответ

Я решил проблему. Ключ был waitForExist метод. ( документ)

Then('I should see map', async () => {
  const path = 'my-page map-component';

  // Wait for 30 seconds max
  await browser.waitForExist(`${path} #map`, 30000);
});

Я проверял на самом деле раньше. Но я не использовал await то время. Вот почему это не удалось.

Другие вопросы по тегам