Тип "{}" нельзя назначить типу "WebElement" - PullRequest
0 голосов
/ 26 сентября 2019

Контекст: я обновляю тесты e2e для использования async / await.При попытке обновить функцию (с возвращаемым типом обещание. Promise ), чтобы она была асинхронной, и вызвать ее из теста, это приведет к ошибке TS.

Текущая реализация:

export function waitUntilElementIsVisible(element: ElementFinder): promise.Promise<WebElement> {
    browser.wait(ExpectedConditions.presenceOf(element))

    return browser.wait(ExpectedConditions.visibilityOf(element))
}

Пробное решение:

export async function waitUntilElementIsVisible(element: ElementFinder): Promise<WebElement> {
   await browser.wait(ExpectedConditions.presenceOf(element))

   return browser.wait(ExpectedConditions.visibilityOf(element))
} 

И функция вызывается как:

it('should wait until element is visible, async () =>
     await waitUntilElementIsVisible( error_page)
     expect(web element displayed)
})

И я сталкиваюсь со следующей проблемой:

Type '{}' is not assignable to type 'WebElement'.  Property 'getDriver' is missing in type '{}'.

Я делаюэто правильно?Любые предложения будут оценены!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Не ответ, но нужно больше места, чем в комментарии

Я запутался, вы говорите, что вызываете функцию, подобную этой

it('should wait until element is visible, async () =>
     await waitUntilElementIsVisible( error_page)
     expect(web element displayed)
})

Тогда ваш объект

class ErrorPage { 
  getErrorPage(): ElementFinder { 
    return $('.error-page') 
  } 
}

Теперь я думал, что все ясно, ErrorPage - это объект ({}), но вам нужен elementFinder.Итак, что вам нужно, это

ErrorPage.getErrorPage() // instead of error_page

Но в комментарии вы утверждаете, что именно так вы это называете

await waitUntilElementIsVisible(ErrorPage.getErrorPage())

Так каким способом вы пользуетесь?error_page или ErrorPage.getErrorPage()

0 голосов
/ 26 сентября 2019

Функция должна выглядеть так:

export async function waitUntilElementIsVisible(element: ElementFinder): Promise<any> {
   await browser.wait(ExpectedConditions.visibilityOf(element))
}

Прежде всего, если мы посмотрим ближе на visibilityOf code , мы увидим, что она сама вызывает presenceOf,так что вам не нужна эта дополнительная проверка.

Повторно, нет необходимости возвращать что-либо в этом случае, более того, поскольку browser.wait docs говорит , возвращается !webdriver.promise.Promise<T>,но я не думаю, что это может быть WebElement, он возвращает то, что ExpectedConditions.visibilityOf возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...