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
то время. Вот почему это не удалось.