Frontend e2e test - как определить, что карта google инициализирована на селене? - PullRequest
0 голосов
/ 09 мая 2019

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

И я довольно новичок в тестировании e2e.

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

В основном, мое тестирование e2e требует:

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

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

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

Я пытался 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 Ответ

0 голосов
/ 09 мая 2019

Я решил проблему. Ключ был 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 в то время. Вот почему это не удалось.

...