Home > front end >  The script was successfully run on my computer but when i send it to my teammates, will not getting
The script was successfully run on my computer but when i send it to my teammates, will not getting

Time:10-01

I am trying to save OTP text into my Data.json file and here it is a code.

it.only('Otp Test', function () {
    cy.visit("https://www.mailinator.com/", { timeout: 30000 })
    cy.get("#addOverlay").type("jd")
    cy.get("#go-to-public").click()
    cy.wait(2000)
    cy.xpath("(//table/tbody/tr[1])[2]").click()
    cy.get('#html_msg_body').then(function ($ele) {
      var ifele = $ele.contents().find('body > table > tbody > tr:nth-child(3) > td > h2');
      cy.wrap(ifele).then(function (ele) {
        const OTP = ele.text();
        cy.readFile("cypress/fixtures/Data.json").then((profile) => {
          profile.OTP = OTP
          cy.writeFile("cypress/fixtures/Data.json", profile);
        })
      })
    })
  })

Sometimes getting this error Timed out retrying after 10000ms: Expected to find element: undefined, but never found it. in the cy.wrap(ifele).then(function (ele) { I don't know what happens. anyone knows please help me.

CodePudding user response:

Firstly, the mail inbox changes so search for your OTP mail by text.

After clicking the email row, you need to wait for the iframe to load. The standard way is using .its('0.contentDocument.body').should('not.be.empty').

it.only('Otp Test', function () {
  cy.visit("https://www.mailinator.com/", { timeout: 30000 })
  cy.get("#addOverlay").type("jd")
  cy.get("#go-to-public").click()
  cy.wait(2000)
  cy.contains('table tbody tr', 'OTP').click()  // find the right email

  cy.get('#html_msg_body')  // iframe
    .its('0.contentDocument.body').should('not.be.empty')  // wait for loading
    .wait(0)    // some javascript needs to run in the iframe 
    .find('table > tbody > tr:nth-child(3) > td > h2')    
    .then($h2 => {    
      const OTP = $h2.text()
      cy.readFile("cypress/fixtures/Data.json").then((profile) => {
        profile.OTP = OTP
        cy.writeFile("cypress/fixtures/Data.json", profile);
      })
    })
})

Footnote

"Sometimes getting this error..." is because the iframe can take time to load it's source (like a browser within the browser).

Using .should('not.be.empty') repeats the read until it has some content.

  • Related