我正在使用带有 CucumberJs 的 WebDriverIo(4.13.2) 进行前端 e2e 测试。
而且我对 e2e 测试还很陌生。
我的应用程序使用谷歌地图,并且有地图标记。
基本上,我的 e2e 测试想要做:
- 等到谷歌地图组件初始化
browser
通过WebDriverIo中的对象搜索 Google 地图标记 DOM- 如果标记存在,则通过测试
问题是谷歌地图的初始化需要时间。
有时在 Selenium 上需要超过 30 秒。所以第二种情况失败了。(暂停)
我试过了browser.pause(30000);
。所以 Selenium 等待 30 秒。
但它仍然失败取决于谷歌地图如何快速响应。此外,我不认为等待 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);
等待谷歌地图初始化是不够的,因为它只等待地图的封面。
我也有类似的测试browser.waitForVisible(MAP_PATH);
。
但没有运气。
如何等待 Google 地图完全加载到 WebDriverIo 上?
谢谢!!
仅供参考,在前端,我正在使用 WebDriverIo 无法检测到的 Polymer 组件。
所以我正在使用名为wdio-webcomponents 的3rd 方库。