gpt4 book ai didi

ruby - 如何使用 capybara 访问电子邮件中的链接

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:37 25 4
gpt4 key购买 nike

我是第一次接触 cucumber 和 capybara 。我有一个应用程序要测试其流程是:'提交表单后,将向用户发送一封电子邮件,其中包含指向另一个应用程序的链接。为了访问该应用程序,我们必须打开邮件并单击链接,该链接将重定向到该应用程序。'。我无权访问邮件 ID。有没有办法提取该链接并继续流程?请给出一些可行的方法。

问候,阿比谢克·达斯

最佳答案

在您的测试中,使用您需要的任何方式来触发您的应用程序发送电子邮件。发送电子邮件后,使用正则表达式从电子邮件正文中的链接中查找 URL(请注意,这仅适用于包含单个链接的电子邮件),然后使用 Capybara 访问该 URL 的路径以继续你的测试:

path_regex = /(?:"https?\:\/\/.*?)(\/.*?)(?:")/    

email = ActionMailer::Base.deliveries.last
path = email.body.match(path_regex)[1]
visit(path)


正则表达式解释

正则表达式 (regex) 本身由正斜杠分隔,这个正则表达式特别由三个组成,每个组由一对括号分隔。第一组和第三组都以 ?: 开头,表明它们是非捕获组,而第二组是捕获组(没有?:)。我将在下面解释这种区别的意义。

第一组 (?:"https?\:\/\/.*?) 是:

  • 非捕获组,?:
  • 匹配单个双引号,"
    • 我们匹配引号,因为我们预计 URL 位于链接标记的 href="..." 属性中
  • 后跟字符串 http
  • 可选地后跟小写字母 ss?
    • 问号匹配前面的内容,在本例中为s,可选
  • 后跟一个冒号和两个正斜杠,\:\/\/
    • 注意反斜杠,它们用于转义在正则表达式中具有特殊含义的字符
  • 后跟通配符 .*?,它将匹配任何字符任意次数,直到达到正则表达式中的下一个匹配项
    • 句点或通配符匹配任何字符
    • 星号 * 重复前面的匹配,最多不限次数,具体取决于后面的连续匹配
    • 问号使它成为一个惰性匹配,这意味着通配符将匹配尽可能少的字符,同时仍允许满足正则表达式中的下一个匹配

第二组 (\/.*?) 是一个捕获组:

  • 匹配单个正斜杠,\/
    • 这将匹配 URL 主机部分后的第一个正斜杠(例如 http://www.example.com/ 末尾的斜杠),因为 中的斜杠http:// 已被第一组匹配
  • 后跟另一个惰性通配符 .*?

第三组 (?:") 是:

  • 另一个非捕获组,?:
  • 匹配单个双引号,"

因此,我们的第二组将匹配 URL 中以主机后的正斜杠开始,一直到但不包括 href="... ".

当我们使用正则表达式调用 match 方法时,它会返回一个 MatchData 的实例,它的行为很像一个数组。索引 0 处的元素是包含整个匹配字符串(来自正则表达式中的所有组)的字符串,而后续索引处的元素仅包含与正则表达式的捕获组匹配的字符串部分(在这种情况下,只有我们的第二组)。因此,为了获得第二组的相应匹配项——这是我们要使用 Capybara 访问的路径——我们获取索引 1 处的元素。

关于ruby - 如何使用 capybara 访问电子邮件中的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25240102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com