Скрипт был успешно запущен на моем компьютере, но когда я отправлю его своим товарищам по команде, никаких данных не будет

#jquery #iframe #cypress

Вопрос:

Я пытаюсь сохранить текст OTP в свой файл Data.json, и вот он-код.

 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);
        })
      })
    })
  }) 

Иногда возникает эта ошибка Timed out retrying after 10000ms: Expected to find element: undefined, but never found it. в cy.wrap(ifele).затем(функция (ele) {
Я не знаю, что происходит. кто знает, пожалуйста, помогите мне.

Комментарии:

1. На какой строке вы получаете эту ошибку ?

2. Получение ошибки в этой строке cy.wrap(ifele).затем(функция (ele) {

Ответ №1:

Во-первых, почтовый ящик меняется, поэтому ищите свою почту OTP по тексту.

После нажатия строки электронной почты вам нужно дождаться загрузки iframe. Стандартный способ — это использование .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);
      })
    })
})
 

Сноска

«Иногда возникает эта ошибка…», потому что iframe может занять некоторое время для загрузки своего источника (например, браузера в браузере).

Использование .should('not.be.empty') повторяет чтение до тех пор, пока в нем не появится какое-то содержимое.

Комментарии:

1. Это приведет к получению ошибки Cannot read properties of undefined (reading 'call')

2. Это все еще работает с моей стороны.

3. Проверьте ссылку на то, что это ошибка возврата cypress [ ibb.co/YbqCbvj]

4. ibb.co/YbqCbvj

5. электронная почта также есть, на вашем компьютере запущен скрипт, пожалуйста, создайте электронное письмо с «pari1» вместо «jd».