Open
Description
Current behavior:
await
-ing cypress chains yields undefined
Desired behavior:
await
-ing cypress chains yields the value of the chain (since the chain is a promise-like, it should work with await out of the box)
Additional Info (images, stack traces, etc)
I understand the recommended way to use cypress is closures, however, when dealing with multiple variables, we run into callback hell's lil' brother closure hell.
The ability to use await
on Cypress chains could be beneficial in many ways:
- avoiding nesting closures many levels deep, thus preventing unreadable code
- making it easy for programmers familiar with traditional async patterns to start using Cypress
Example code using closures
describe('Filter textbox', () => {
beforeEach(() => {
cy.get(test("suplovaniTable")).as("suplovaniTable");
cy.get(test("filterTextbox")).as("filterTextbox");
});
it('changes data on filter text change', () => {
cy.get("@suplovaniTable").then((el) => {
return el[0].innerHTML;
}).then((innerHTML) => {
return sha256(innerHTML);
}).then((hash) => {
cy.get("[data-test=suplovaniTable] > tbody > :nth-child(1) > :nth-child(2)")
.then((tds) => {
const text = tds[0].innerText;
cy.get("@filterTextbox").type(text);
cy.get("@suplovaniTable")
.then(el => el[0].innerHTML)
.then((innerHTML) => {
expect(hash).to.not.equal(sha256(innerHTML));
});
});
});
});
});
Example code using await
describe('Filter textbox', () => {
beforeEach(() => {
cy.get(test("suplovaniTable")).as("suplovaniTable");
cy.get(test("filterTextbox")).as("filterTextbox");
});
it('changes data on filter text change', async () => {
const table = await cy.get("@suplovaniTable");
const hash = sha256(table[0].innerHTML);
const filterCell = await cy.get("[data-test=suplovaniTable] > tbody > :nth-child(1) > :nth-child(2)");
await cy.get("@filterTextbox").type(filterCell[0].innerText);
const newTable = await cy.get("@suplovaniTable");
const newHash = sha256(newTable[0].innerHTML);
expect(hash).to.not.equal(newHash);
});
});
- Operating System: Windows 10 x64
- Cypress Version: Beta 2.1.0
- Browser Version: Chrome 64