【发布时间】:2022-11-25 15:26:53
【问题描述】:
我需要有关使用柏树测试 mailhog 的帮助。
我正在尝试点击电子邮件正文中的“忘记密码”链接,请问如何操作?
【问题讨论】:
-
请分享您的应用程序的 HTML。
我需要有关使用柏树测试 mailhog 的帮助。
我正在尝试点击电子邮件正文中的“忘记密码”链接,请问如何操作?
【问题讨论】:
假设您有一个基于 HTML 的 Web 应用程序,您可以直接使用文本来查找并单击该元素。
cy.contains('Forgot password').click()
【讨论】:
cy.mhGetAllMails().mhFirst().mhGetBody().then(body => {cy.log(body)})
您可以解析正文字符串以获取链接,但这会很混乱。
最好使用DOMParser
cy.mhGetAllMails().mhFirst().mhGetBody().then(body => {
const parser = new DOMParser();
const doc = parser.parseFromString(body, 'text/html') // make a DOM
const anchor = doc.querySelector('a') // look for anchor tag
const href = anchor.href // get the link
cy.visit(href) // visit the link
})
笔记
您不能直接单击带有.click() 的链接,因为上面创建的 DOM 不是附加到 Cypress 的实时 DOM。但是你应该可以 cy.visit(href) 做同样的事情。
我预见到的唯一问题是 cross-origin 错误 - 如果你得到它,请使用 cy.origin() 命令 Ref。
如果您需要有关cy.origin() 电子邮件正文用法的更多详细信息,请参阅@Mr.PrasadJ 问题How to access new tab by clicking on "href"。
【讨论】:
就我而言,解析正文不起作用(我无法查询我的 a 标签)。我使用正则表达式来检索我的链接,然后单击它。
在邮件正文中,我的链接如下所示:
<a href="mydomain/verify/fXxo4s_isP-mlm">Verify account</a>
但是在 cy.mhGetAllMails().mhFirst().mhGetBody().then(body => {cy.log(body)}) 的日志中,它被随机数 = 和
融化了,因为它没有被解析......
对我来说可行的解决方案是用接受这些字符的模式提取匹配项,然后将其删除。最后重建链接以访问它:
cy.mhGetAllMails().mhFirst().mhGetBody().then(content => {
let token = content.match('verify/([A-Za-z0-9=~_\r\n-]+)<')[1];
token = token.replace(/(
|=)/gm, "");
cy.visit('/verify/' + token);
})
也许不是更清洁的解决方案,但我希望它能有所帮助
【讨论】: