#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]
5. электронная почта также есть, на вашем компьютере запущен скрипт, пожалуйста, создайте электронное письмо с «pari1» вместо «jd».