Транспортир, я должен использовать then () после вызова транспортира? - PullRequest
1 голос
/ 19 марта 2019

Можно ли написать:

getFieldX().clear().sendKeys('abc');

или мне следует написать:

getFieldX().clear().then( () => sendKeys('abc));

Я полностью запутался в обработке Обещания в транспортире.clear() возвращает обещание, поэтому я должен потом использовать .then(), не так ли?

Но я нашел примеры с .then, а некоторые без.У самого транспортира есть пример без .then(): https://www.protractortest.org/#/control-flow

Имеет ли транспортир собственный механизм и разрешает одно за другим обещание, поэтому нет необходимости использовать .then() после вызова транспортира, который возвращает обещание?

И поток управления транспортира активен только в спецификации?При использовании .sendKeys() в нормальной функции я должен использовать .sendKeys().then(...)?

1 Ответ

1 голос
/ 19 марта 2019

Все зависит от того, используете ли вы SELENIUM_PROMISE_MANAGER или нет. Поскольку это (уже?) Становится устаревшим, я бы не стал его использовать. По умолчанию для него должно быть установлено значение false, но если вы хотите быть уверенным, вы можете добавить SELENIUM_PROMISE_MANAGER = false; в файл conf. Способ перемещения транспортира заключается в использовании async / await , поэтому ваша функция sendKeys будет выглядеть следующим образом:

let field = element(by.css('CSS.Selector'));
await field.clear();
await field.sendKeys('abc');

Поскольку это асинхронные функции, вам необходимо правильно определить свою функцию, поэтому базовая спецификация будет выглядеть следующим образом:

describe('Demonstrating async/await',function(){
  it('Should send some keys', async function(){
    let field = element(by.css('CSS.Selector'));
    await field.clear();
    await field.sendKeys('abc');
  });
});

Важное отличие состоит в том, что функцию необходимо определить как async function(). Что касается чтения кода, await можно просто прочитать как «Подождите, пока обещание не будет решено двигаться дальше». Это немного утомительно, и вы чувствуете, что пишете await перед каждой строкой кода (в основном вы делаете), но я считаю, что это значительно лучше, чем .then() деревья.

...