Почему isElementPresent() не работает в моих скриптах protractor?

#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;}