Console.log выполняется до того, как браузер запустит URL

Команда,

Я объявляю элемент как переменную типа txtSearch : element(by.xpath('//input[@type="search"]')), в какой-то момент я хочу зарегистрировать оператор как

var clickOn = function(webElement){
webElement.click();
console.log("Successfully clicked on the " + webElement);
};

Я вызываю эту функцию из файла спецификации, например clickOn (txtSearch).

этот console.log регистрирует консоль до того, как оператор будет выполнен, т. е. сначала все операторы console.log выполняются первыми, даже до запуска URL-адреса.

Пожалуйста, найдите необходимую информацию ниже:

Версия узла: 3.10.3 Версия транспортира: 4.0.3

Заранее спасибо.


person Jothi Vignesh    schedule 16.02.2017    source источник
comment
Это ожидаемое поведение. Весь ваш код будет выполняться асинхронно.   -  person Sudharsan Selvaraj    schedule 16.02.2017
comment
Вам определенно следует обновить nodejs. Я предлагаю использовать 7 версию. Также protractorjs 5.x не будет работать на узле js ‹ 6   -  person Xotabu4    schedule 16.02.2017


Ответы (1)


Добро пожаловать в асинхронный мир!

Поскольку все асинхронно, чтобы установить нужный порядок выполнения, попробуйте следующее:

var clickOn = function(webElement){
    return webElement.click().then(()=> {
        console.log("Successfully clicked on the " + webElement);
    });
};

Это запланировало бы журнал консоли только тогда, когда щелчок был фактически выполнен на стороне браузера.

Но я настоятельно рекомендую прочитать о промисах и потоке управления в webdriverjs: http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/promise.html

person Xotabu4    schedule 16.02.2017
comment
Хм, я тоже хотел опубликовать этот ответ, но меня смущает тот факт, что он использует узел 3.10.3, который не поддерживает Promises и ES6, а также откуда он взял эту версию: D? - person Alexandru Olaru; 16.02.2017