在 JS 中使用 async/await 的 Selenium,找到并单击元素
Selenium with async/await in JS, find and click on element
我正在尝试使用 Selenium webdriver 和 Mocha 将我的测试重构为具有 async/await 功能的 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
单击方法returns 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()
returns a Promise
,这就是上面第二个语法起作用的原因,因为执行被阻止,直到 Promise
解析为 WebElement
对象。
然而,在您在第一个示例中使用的语法中,它试图 await
on (click()
) 的函数永远不会被调用,因为 Promise
不会有一个 click()
功能。请注意,您的第二种语法中有两个 await
,但第一种语法中只有一个。
要在一行中完成您想要做的事情,您必须执行以下操作:
await (await layout.Elements.routePageButton()).click()
我正在尝试使用 Selenium webdriver 和 Mocha 将我的测试重构为具有 async/await 功能的 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
单击方法returns 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()
returns a Promise
,这就是上面第二个语法起作用的原因,因为执行被阻止,直到 Promise
解析为 WebElement
对象。
然而,在您在第一个示例中使用的语法中,它试图 await
on (click()
) 的函数永远不会被调用,因为 Promise
不会有一个 click()
功能。请注意,您的第二种语法中有两个 await
,但第一种语法中只有一个。
要在一行中完成您想要做的事情,您必须执行以下操作:
await (await layout.Elements.routePageButton()).click()