类型“{}”不可分配给类型 'WebElement'

Type '{}' is not assignable to type 'WebElement'

上下文:我正在更新端到端测试以使用异步/等待。当尝试将函数(使用 return 类型 promise.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 '{}'.

我这样做正确吗?如有任何建议,我们将不胜感激!

函数应该如下所示:

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

首先,如果我们仔细观察 visibilityOf code,我们会发现它会自己调用 presenceOf,因此您不需要额外的检查。

其次,在这种情况下不需要return任何东西,而且,作为browser.wait docs says,它returns !webdriver.promise.Promise<T>,但我不认为它可能是 WebElement,它 return 是什么 ExpectedConditions.visibilityOf return。

不是答案,但需要比评论

更多的space

我很困惑,你说你是这样调用函数的

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_pageErrorPage.getErrorPage()