#typescript #automation #protractor
#машинописный текст #автоматизация #транспортир #typescript
Вопрос:
Я использую VS Code для написания TypeScript, который в конечном итоге компилируется в protractor и выполняет скрипты.
Похоже, что VSCode не выполняет автозаполнение element.isPresent()
или element.isElementPresent
, и это сводит меня с ума.
Ниже приведен мой код.
helper.ts
import { browser, by, ElementArrayFinder, WebElement, ElementFinder } from 'protractor';
async isElementPresent(element: WebElement): Promise<boolean> {
expect(await element.isElementPresent().toBe(true));
}
Я хочу проверить, присутствует ли expandAllLink или нет, передав его в качестве параметра вспомогательной функции.
spec1.ts
expandAllLink: WebElement = element(by.xpath("//span[contains(text(),'Expand All')]"));
Ответ №1:
Вы также можете попробовать следующее:
let el: ElementFinder = $('cssSelector');
expect(el.isPresent()).toBeTruthy();
из-за isPresent()
возврата Promise<boolean>
Комментарии:
1. Спасибо за ответ @yong expect(ожидает browser.isElementPresent(ele)). toBe(true); похоже, не возвращает Promise<boolean>, поэтому я добавил const abc: Promise<boolean> = expect(ожидает browser.isElementPresent(элемент ожидания)). тоБе(true). затем(функция() { возвращает true; }); возвращает abc; но это возвращает true, даже если элемент не существует в DOM.
Ответ №2:
В вашем коде обнаружены две проблемы.
1) isElementPresent — это функция browser
объекта, но element
.
2) expect().toBe()
в вашем коде с непревзойденной парой ()
import { browser, by, ElementArrayFinder, WebElement, ElementFinder } from 'protractor';
async isElementPresent(ele: WebElement): Promise<boolean> {
// below is your code with wrong pair of ()
expect(await element.isElementPresent().toBe(true));
// expect().toBe() should return Pormise<null>
let present = await browser.isElementPresent(ele);
expect(present).toBe(true);
return present;
// if this function is for getting the present state of elment
// recommend move expect out of this function.
// if this function is for validating the present state,
// recommend make function return value to void.
}
Комментарии:
1. Спасибо за ответ @yong,
expect(await browser.isElementPresent(ele)).toBe(true);
похоже, не возвращает обещание<boolean>, поэтому я добавилconst abc: Promise<boolean> = expect(await browser.isElementPresent(await element)).toBe(true).then(function() { return true; }); return abc;
, но это возвращает true, даже если элемент не существует в DOM.2. Я обновил код. Но я боюсь, что при сбое ожидания оператор return не будет выполнен.
3. Нет ли способа
if(expect(present).toBe(true)){return true;}else{return false;}