Написать тестовый сценарий, используя обещания в JS - PullRequest
0 голосов
/ 24 августа 2018

Я только начал использовать NodeJS и пишу тестовый пример пользовательского интерфейса.

Я читал много онлайн-материалов, но все еще не могу понять, как использовать обещания для тестовых случаев пользовательского интерфейса.

Мне нужно написать тестовый сценарий (сценарий ниже).Я не хочу использовать setTimeout.

Я не могу понять, как использовать обещания в приведенном ниже случае.

var webdriver = require('selenium-webdriver'),By = webdriver.By, until = 
webdriver.until;
var driver  = new webdriver.Builder().forBrowser('chrome').build();
driver.get('http://www.*********url****');

driver.executeScript("document.getElementById('uid').setAttribute('value', 'u1')");
driver.executeScript("document.getElementById('pwd').setAttribute('value', 'pwd')");
driver.findElement(By.id('page1_login')).click(); 
driver.findElement(By.id('page2_navigator')).click();
driver.findElement(By.id('page2_my_tasks')).click();
driver.findElement(By.id('page3_create_task')).click();
driver.findElement(By.id('page3_submit_task')).click();

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Редактировать: При обсуждении с 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();
  // ...
})();
0 голосов
/ 25 августа 2018

Вам неясно, как использовать обещания, потому что это не тот случай, для которого предназначены обещания.

Прежде всего вы говорите, что хотите использовать обещания вместо setTimeout, это невозможно, потому что setTimeout - это функция, которая откладывает выполнение вещей минимумом на заданные миллисекунды.

Обещания - это способ организовать ваш код и цепочку, следуя асинхронным вызовам, которые просто приятнее, чем обратные вызовы внутри друг друга, но это обещания не обеспечиваютВы с какой-то отложенной структурой.Также проверьте это из

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...