Protractor: element.getText() returns an object and not String
JavascriptTestingProtractorJavascript Problem Overview
I have an element defined as
this.clientRowName = element(by.id('CLIENT_NAME')); //page object file
I want to read the text in this element which is "ABC" but doing: var client = page.clientRowName.getText();
returns an object instead of a string. Is there any other way that I can get the text for the element
Javascript Solutions
Solution 1 - Javascript
getText()
returns a promise, you need to resolve it:
page.clientRowName.getText().then(function (text) {
console.log(text);
});
Or, if you just want to assert the text, let expect()
resolve the promise for you:
expect(page.clientRowName.getText()).toEqual("ABC");
Promises and the Control Flow documentation page should clear things up.
Solution 2 - Javascript
Another solution may be to use async/await
.
class Page {
constructor() {
this.clientRowName = $('#CLIENT_NAME');
}
}
/****************/
it('should console.log client name', async () => {
const client = await Page.clientRowName.getText();
console.log(client);
});
Solution 3 - Javascript
I usually used element.getAttribute('value')
Solution 4 - Javascript
If you're in 2021, you will want to read this answer
according to protractors documentation, .getText() returns a promise.
The best way to handle a promise, as of 2021, is to use async/await keywords. This will make Protractor 'freeze' and wait, until the promise is resolved before running the next command
it('test case 1', async () => {
let text = await page.clientRowName.getText();
console.log(text);
})
.then()
can also be used, but using async/await
will make your code a lot more readable and easier to debug.