javascript - Selenium with asyncawait in JS, find and click on element - Stack Overflow

I'm trying to refactor my tests using Selenium webdriver and Mocha to ES7 with asyncawait functio

I'm trying to refactor my tests using Selenium webdriver and Mocha to ES7 with async/await functionality. I have got following piece of code:

await loginPage.loginAsAdmin()

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

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

I don't understand why the particular does not work - I get:

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

Function before click method returns webElement, as you can see:

Layout:

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

Method:

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

I'm trying to refactor my tests using Selenium webdriver and Mocha to ES7 with async/await functionality. I have got following piece of code:

await loginPage.loginAsAdmin()

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

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

I don't understand why the particular does not work - I get:

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

Function before click method returns webElement, as you can see:

Layout:

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

Method:

findVisible: async (cssSelector) => {
  let elm = await driver().findElement(by.css(cssSelector))
  return elm
}
Share Improve this question edited Apr 18, 2017 at 17:48 Felix Kling 818k181 gold badges1.1k silver badges1.2k bronze badges asked Apr 18, 2017 at 11:42 petrppepetrppe 1553 silver badges15 bronze badges 1
  • async/await is part of ES2017, not ES2016 (ES7). – Felix Kling Commented Apr 18, 2017 at 17:48
Add a ment  | 

1 Answer 1

Reset to default 4

The problem here is misunderstanding that await is a language keyword in ES2017 that allows you to block execution of the calling async function until a Promise returned by an invoked function resolves.

routePageButton() returns a Promise, and this is why the second syntax above works, as execution is blocked until the Promise resolves to a WebElement object.

However in the syntax you are using in the first example, the function that it is attempting to await on (click()) is never called, because a Promise does not have a click() function. Note that you have two awaits in your second syntax, but only one in your first.

To do what you are attempting to do in one line, you would have to do something like:

await (await layout.Elements.routePageButton()).click()

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745621816a4636563.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信