Вариант 1: использовать async / await
Вы должны использовать async / await, когда это возможно.Вам нужно будет установить флаг SELENIUM_PROMISE_MANAGER
в false, чтобы отключить поток управления по умолчанию:
it ('some description', async () => {let elementNameRow = await element.all (by.name ('nameRow')). count (). then ((size) => {thisNum = parseInt (Math.random () * (size - 0) + 0);
thisLast = await element.all(by.name('last')).get(thisNum).getText();
thisFirst = await element.all(by.name('first')).get(thisNum).getText();
console.log(thisLast + ' ' + thisFirst);
await element.all(by.name('nameRow')).get(thisNum).click();
let newElement = element(by.tagName('h3'));
expect(await newElement.getText()).toContain(thisLast + ' ' + thisFirst);
});
});
Вариант 2: вложенные обещания
Я обычно говорю людям вкладывать ваши обещания в блоки, чтобы разрешить getText
ИЛИ вы можете поместить их в массив обещаний и затем выполнить обещание.
Без обещания. Все
it('some description',() => {
let elementNameRow = element.all(by.name('nameRow')).count().then((size) => {
thisNum = parseInt(Math.random() * (size - 0) + 0);
element.all(by.name('last')).get(thisNum).getText().then(thisLast => {
return element.all(by.name('first')).get(thisNum).getText().then(thisFirst => {
return element.all(by.name('nameRow')).get(thisNum).click().then(() => {
let newElement = element(by.tagName('h3'));
expect(newElement.getText()).toContain(thisLast + ' ' + thisFirst);
});
});
});
});
});
Если вы используете Promise.all:
it('some description',() => {
let elementNameRow = element.all(by.name('nameRow')).count().then((size) => {
thisNum = parseInt(Math.random() * (size - 0) + 0);
let promises = [];
let thisFirst = '';
let thisLast = '';
promises.push(element.all(by.name('last')).get(thisNum).getText()
.then(text => { thisLast = text; });
promises.push(element.all(by.name('first')).get(thisNum).getText()
.then(text => { thisFirst = text; });
promises.push(element.all(by.name('nameRow')).get(thisNum).click());
Promise.all(promises).then(() => {
// resolve the get text and click on the name row
let newElement = ;
expect(element(by.tagName('h3')).getText()).toContain(thisLast + ' ' + thisFirst);
});
});
});