我正在尝试弄清楚如何在以下场景中获取getText()的实际文本值:
var elementNameRow = element.all(by.name('nameRow')).count().then(function(size){
thisNum = parseInt(Math.random() * (size - 0) + 0);
thisLast = element.all(by.name('last')).get(thisNum).getText();
thisFirst = element.all(by.name('first')).get(thisNum).getText();
console.log(thisLast.resolve());
var elementNameRowSelect = element.all(by.name('nameRow')).get(thisNum).click();
var newElement = element(by.tagName('h3'));
var expectedString = thisFirst + " " + thisLast;
expect(newElement.getText()).toContain(expectedString);
});
正如您可能推断的那样,expectedString
等于一对[Object Object]
件。
如何在期望中获取这些名称的文本?我看过测试通过,其他一切按预期工作。它做了正确的事情,点击了正确的链接等。我可以从错误消息中看出它甚至在newElement
中得到了正确的结果。它只是没有意识到,因为我无法得到适当的文本进行比较。我在这里看到了几个类似的问题,但我不知道如何在这里应用这些答案。
答案 0 :(得分:2)
您应该尽可能使用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);
});
});
我经常告诉人们将你的承诺嵌套在那些块中以解析getText
或者你可以把它们放在一个promise数组上然后做一个promise.all。
没有promise.all
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);
});
});
});