2

我正在尝试使用 Selenium webdriver 和 Mocha 将我的测试重构为具有异步/等待功能的 ES7。我有以下代码:

await loginPage.loginAsAdmin()

/* THIS DOES NOT WORK */
//await layout.Elements.routePageButton().click()

/* THIS DOES WORK */
let a = await layout.Elements.routePageButton()
await a.click()

我不明白为什么这个特别不起作用 - 我得到:

TypeError: layout.Elements.routePageButton(...).click is not a function

click方法返回webElement之前的函数,可以看到: 返回的元素

布局:

routePageButton:  async () => await findVisibleElement('#route_info a')
const findVisibleElement = utils.Methods.Element.findVisible

方法:

findVisible: async (cssSelector) => {
  let elm = await driver().findElement(by.css(cssSelector))
  return elm
}
4

1 回答 1

3

这里的问题是误解,它await是 ES2017 中的语言关键字,它允许您阻止调用函数的执行,async直到Promise被调用函数返回的 a 解决。

routePageButton()返回 a Promise,这就是上面第二种语法有效的原因,因为执行被阻塞,直到Promise解析为WebElement对象。

但是,在您在第一个示例中使用的语法中,它试图awaiton ( click()) 的函数永远不会被调用,因为 aPromise没有click()函数。请注意,您await的第二种语法中有两个 s,但第一种语法中只有一个。

要在一行中执行您尝试执行的操作,您必须执行以下操作:

await (await layout.Elements.routePageButton()).click()
于 2017-04-18T12:00:57.537 回答