Я новичок в написании тестов e2e в транспортире.
Я начал использовать async await в тестах транспортира и добавил также ожидание браузера. Ниже мой код.
Проблема menuBtn никогда не найдена транспортиром и время ожидания истекло. Я пытался использовать ожидаемые условия видимости и присутствия. но они все висят там и никогда не решаются.
Я думал, что я даю неправильный локатор. Однако при использовании $ x ('xPath в строке 3') он обнаруживает его на веб-странице.
Может ли кто-нибудь, пожалуйста, помочь в этом.
async menuNav(title, pageElement) {
browser.sleep(3000);
// browser.waitForAngular();
const menuBtn = element(by.xpath('.//mat-icon[@id="' + pageElement + '"]'));
console.log('menu btn: ', menuBtn.locator());
await browser.wait(() => {
return browser.isElementPresent(menuBtn);
}, 3000);
await menuBtn[0].click();
const menuTitle = element(by.xpath('.//*[contains(text(),\'' + title + '\')]'));
browser.sleep(3000);
menuTitle.isPresent().then(result => {
expect(result).toBe(true);
console.log('inside is present');
console.log(title);
});
}
Вот так выглядит HTML
<div *ngFor="let item of items"
class="item"
placement="right"
container="body"
containerClass="sidebar-tooltip">
<mat-icon class="icon" [id]="item.id" [svgIcon]="item.icon"></mat-icon>
</div>
Основываясь на комментариях @Gunderson и @SimonN, я добавил await перед локаторами элементов. Но я подумал, что это просто определения, так как я не использую локаторы транспортира, такие как findByElement. Однако я изменил код, и он по-прежнему блокируется в menuBtn.click, и теперь мой код:
async menuNav(title, pageElement) {
browser.sleep(3000)
const menuBtn = await element(by.xpath('.//mat-icon[@id="' + pageElement + '"]'));
browser.wait(() => {
return browser.isElementPresent(menuBtn);
}, 3000);
return menuBtn.isPresent().then(elementAvailable => {
browser.wait(this.EC.elementToBeClickable(menuBtn), 3000).then(async () => {
await menuBtn.click();
const menuTitle = await element(by.xpath('.//*[contains(text(),\'' + title + '")]'));
return browser.wait(this.EC.presenceOf(menuTitle), 3000).then(() => {
return true;
});
});
}).catch(error => {
console.log('error: ', error);
});
}