2017-04-18 3 views
1

Async/Wwait 기능을 사용하여 Selenium webdriver와 Mocha를 ES7에 사용하여 테스트를 리팩터링하려고합니다. 특정 작동하지 않는 이유JS에서 async/aswait을 사용하는 Selenium을 찾고 요소를 찾아 클릭하십시오.

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 

기능 전에 클릭 방법은 webElement를 반환, 당신이 볼 수 : Returned element

레이아웃 :

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 
} 
+0

'비동기/await'는 ES2017의 일부입니다, *하지 * ES2016 (ES7). –

답변

2

여기 await는 당신이 호출 기능이 해결 의해 반환 Promise 때까지 호출 async 함수의 실행을 차단할 수 있습니다 ES2017에서 언어 키워드이라고 오해하는 문제.

routePageButton()Promise 반환하고 실행이 Promise까지 차단 작동으로 상기 제 구문하는 WebElement 객체 해결 이유이다.

그러나 첫 번째 예에서 사용하는 구문이 호출되지 않습니다 ( click())에 await을 시도하는 기능에 Promise 때문에 click() 기능이 없습니다. 두 번째 구문에는 두 개의 await이 있지만 첫 번째 구문에는 하나만 있습니다.

당신이 한 줄에서 수행하려는 것을 수행하려면, 당신은 같이해야 할 것이다 :

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

이제 저는 그 요점을 봅니다, 고마워요! – petrppe

+1

'await'은 ES7의 일부가 아니며 실행을 차단하지 않습니다. –

+0

설명해 주셔서 감사합니다. 사과를 잘못 했으므로 곧 수정하겠습니다. – Benjamin