Редактировать: При обсуждении с nikoss наткнулся на замечательный ресурс из MDN по Использование обещаний .Если вы не работали с ними раньше, это может быть хорошим началом.
Некоторые API обрабатывают асинхронные вызовы с обратными вызовами, другие возвращают объект Promise , инекоторые дают оба варианта.
Модуль selenium-webdriver использует Promises, их документацию по API можно найти здесь .Есть хотя бы пара вариантов.Вы можете создать так называемую цепочку Promise, которая будет выглядеть примерно так:
var driver = new webdriver.Builder().forBrowser('chrome').build(); // returns Promise
driver
.then(() => driver.get('http://www.*********url****')}) // IMPORTANT: return a Promise to continue the chain
.then(() => driver.executeScript(...)})
.then(() => driver.findElement(By.id('page1_login')).click()})
// ...
.catch((e) => { /** optionally catch errors here **/ });
Если вы работаете на Node 7.5 или новее, вы можете использовать асинхронные функции .Результат выглядит довольно близко к тому, что вы имели.Обратите внимание, что ваш код все еще должен знать, какие методы возвращают Promise и должен await
разрешение Promise, прежде чем перейти к следующему шагу.
(async function () => {
var driver = await new webdriver.Builder().forBrowser('chrome').build(); // await Promise here
await driver.get('http://www.*********url****');
await driver.executeScript("document.getElementById('uid').setAttribute('value', 'u1')");
await driver.findElement(By.id('page1_login')).click();
// ...
})();