量角器 - 从 getText() 中获取文本
Protractor - getting the text out of getText()
我试图弄清楚如何在以下情况下获取 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]
件。
如何获取这些名称的文本以在 expect 中使用?我已经看到测试通过,其他一切都按预期进行。它做了正确的事情,点击了正确的链接,等等。我可以从错误消息中看出它甚至在 newElement
中得到了正确的结果。它只是没有意识到,因为我无法获得合适的文本进行比较。我在这里看到了几个类似的问题,但我不太明白如何在这里应用这些答案。
选项 1:使用异步/等待
您应该尽可能使用 async / await。您需要将标志 SELENIUM_PROMISE_MANAGER
设置为 false 以禁用默认控制流:
它('some description', async() => {
让 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:嵌套承诺
我通常告诉人们将您的承诺嵌套在 then 块中以解决 getText
或者您可以将它们放在承诺数组中然后执行 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);
});
});
});
我试图弄清楚如何在以下情况下获取 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]
件。
如何获取这些名称的文本以在 expect 中使用?我已经看到测试通过,其他一切都按预期进行。它做了正确的事情,点击了正确的链接,等等。我可以从错误消息中看出它甚至在 newElement
中得到了正确的结果。它只是没有意识到,因为我无法获得合适的文本进行比较。我在这里看到了几个类似的问题,但我不太明白如何在这里应用这些答案。
选项 1:使用异步/等待
您应该尽可能使用 async / await。您需要将标志 SELENIUM_PROMISE_MANAGER
设置为 false 以禁用默认控制流:
它('some description', async() => { 让 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:嵌套承诺
我通常告诉人们将您的承诺嵌套在 then 块中以解决 getText
或者您可以将它们放在承诺数组中然后执行 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);
});
});
});