Я использую Typescript-Protractor Jasmine. Когда элемент не найден, это не значит, что он не проходит тест (блок «it»). Хотя он показывает UnhandledPromiseRejectionWarning, но по-прежнему показывает переданный скрипт.
await element(by.xpath("xpath")).click().then(()=>{logObj.info("clicked")});






Чтобы правильно обрабатывать такие случаи, вы должны работать с ожиданием (утверждением). Если щелчок или другое действие не увенчались успехом, это не означает, что проверка должна завершиться неудачей. Вы должны указать, когда потерпеть неудачу.
Например:
it('should do something smart', async (done) => {
await element(by.xpath('dsadadada')).click()
.then(() => {
logObj.info("clicked");
})
.catch(rejected => {
logObj.info("it was not clicked due rejected promise");
done.fail(rejected); // fail the test
});
done();
});
Или поработайте с обработкой исключений 'try catch':
it('should do something smart', async (done) => {
try {
await element(by.xpath('dsadadada')).click(); // will throw error if not clickable
await element(by.xpath('dsadadada')).sendKeys('dasdada'); // will throw error if cannot sendkeys
} catch (e) {
done.fail(e); // will fail the test if some action throw an error.
}
done(); // if there is no error will mark the test as success
});
или с ожиданиями
it('should do something smart', async (done) => {
await element(by.xpath('dsadadada')).click(); // will throw error if not clickable
expect(element(by.xpath('some new element on the page after click')).isPresent()).toBeTruthy();
done();
});
Пример инкапсулированного ПОМ
public class PageObjectClass {
// action of click.
public async clickOnXBtn() {
await await element(by.xpath('dsadadada')).click();
}
}
it('do something dummy', async (done) => {
try {
// pageobject is class which holds the action for this button.
const pageObject = new PageObjectClass();
await pageObject.clickOnXBtn();
} catch (e) {
done.fail(e);
}
});
Вы можете прочитать больше о POM здесь: https://github.com/angular/protractor/blob/master/docs/page-objects.md
Спасибо за подробный ответ. Попробуйте поймать сработало для меня, но вот проблема. Я не пишу код в блоке 'it'. Я пишу код функции внутри класса, а затем вызываю эту функцию внутри блока it. вот так: it ('do something', async (done) => {try {obj.methodname ();} catch (e) {done.fail (e);} done (); и в этом случае ваше решение не работает.
(если ответ помог вам отметить это) и .. да, это правильно. когда вы инкапсулируете более мелкие функции в одну, работайте с try catch на уровне тестирования. не помещайте expect () на уровне объекта страницы.
мне нужно использовать методы. Не могли бы вы мне помочь, как я могу реализовать это в методах? Решение не работает, когда я использую методы, упомянутые в комментарии выше.
Я передал done в качестве аргумента в методе: await pageObject.clickOnXBtn (done); тогда это сработало для меня. Спасибо
Это может быть связано с тем, что обещание не было возвращено.