使用Nodejs在selenium中获得承诺

时间:2018-06-06 10:34:06

标签: node.js selenium selenium-webdriver

我正在尝试使用带有nodejs的selenium创建银行登录自动化,并且陷入Promise {pending}。

const {Builder, By, Key, until} = require('selenium-webdriver');

async function main() {
let driver = await new Builder()
    .forBrowser('chrome')
    .build();

await driver.get('login-url')
const name = await driver.findElement(By.name('AuthenticationFG.USER_PRINCIPAL'))
const pass = await driver.findElement(By.name('AuthenticationFG.ACCESS_CODE'))

await name.sendKeys(username)
await pass.sendKeys(password)

await driver.findElement(By.id("VALIDATE_CREDENTIALS1")).click()
await driver.wait(until.elementIsVisible(driver.findElement(By.id('LoginName'))), 1000)
await console.log(driver.findElement(By.id('LoginName'))) <-- getting issue here

}
main()

我试图在登录页面后打印用户名,但它继续给予Promise {pending}。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

AbhinavD指出使用:

main().then((result) => {
// do stuff here
})

您的主要功能是async,它会返回一个承诺。 promise是一种可以解析,拒绝或挂起的数据结构。当承诺得到解决后,您可以在其上调用.then()回调。这是一个应该说明这一点的例子:

&#13;
&#13;
 async function test () {

  let randomvalue = 5;

  return randomvalue;
}

let returnValue = test()

// this logs the promise object
console.log(returnValue);

// this logs the actual value returned in the async function
returnValue.then((value) => {
	console.log(value)
});
&#13;
&#13;
&#13;

async函数实质上解析了带有返回值的promise。

对于想要经常使用JS的人来说,承诺本身是必须学习的主题。所以here是一个更详细的来源:

答案 1 :(得分:0)

main函数是异步的。你需要等待它完成。

main().then((result) => {
// do stuff here
})

答案 2 :(得分:0)

您需要致电getText()以阅读元素上显示的文字。

let loginName = await driver.findElement(By.id('LoginName')).getText();
console.log(loginName);


await main()