我正在尝试使用 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
}
最佳答案
这里的问题是误解 await
是 ES2017 中的一个语言关键字,它允许您阻止执行调用 async
函数,直到出现 Promise
> 由调用的函数返回解析。
routePageButton()
返回一个 Promise
,这就是上面第二个语法起作用的原因,因为执行被阻止,直到 Promise
解析为一个 WebElement
对象。
但是,在第一个示例中使用的语法中,它尝试 await
的函数 (click()
) 永远不会被调用,因为 Promise
没有 click()
函数。请注意,第二个语法中有两个 await
,但第一个语法中只有一个。
要在一行中完成您尝试执行的操作,您必须执行以下操作:
await (await layout.Elements.routePageButton()).click()
关于javascript - Selenium 在 JS 中使用 async/await,查找并单击元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43471166/