cheerio.load() 需要一个字符串 node_modules/cheerio/lib/load.js:74:1

cheerio.load() expects a string node_modules/cheerio/lib/load.js:74:1

提问人:Mariam Aslam 提问时间:11/6/2023 更新时间:11/7/2023 访问量:52

问:

我正在使用 Cypress Typescript,并在我的自动化中集成了 gmail-tester。我面临的问题非常奇怪。我正在尝试单击电子邮件中的按钮,即使我手动单击按钮,即通过输入 URL 显示屏幕,一切似乎都很好,但当我通过获取按钮 URL 并单击似乎没有任何效果时,一切似乎都很好!

/// <reference types="Cypress" />
import * as cheerio from 'cheerio';
import fs from 'fs';


describe("Email assertion:", () => {
  it("Using gmail_tester.get_messages(), look for an email with specific subject and link in email body", function () {
    cy.task("gmail:get-messages", {
      options: {
        from: "[email protected]",
        subject: "Account confirmation",
        include_body: true,
      },
    }).then((emails: any) => {
      assert.isAtLeast(emails.length, 1, "Expected to find at least one email, but none were found!");
      assert.isTrue(emails[0].subject.indexOf("Account confirmation") >= 0, "Found email with subject 'Account confirmation'!");
      const body = emails[0].html;
      const emailContent = emails.html;
      // Use Cheerio to extract the link URL from the email content
      const $ = cheerio.load(emailContent);
      const linkUrl = $('a[href^="http://localhost:3000/Identity/Account/ConfirmEmail"]').attr('href');
      // Use cy.visit() to navigate to the link URL
      cy.visit(linkUrl);
    });
  });
});

enter image description here

我厌倦了多种选择,但似乎没有任何效果。

打字稿 赛普拉斯 Gmail-API

评论

0赞 Al Pugliese 11/6/2023
它对我有用 - 你的 emialcontent 是什么?
0赞 Al Pugliese 11/6/2023
很可能你打错了字 - 但是 - 保持一致,你的错误就会消失。.const body = emails[0].htmlconst emailContent = emails.html
0赞 Mariam Aslam 11/7/2023
嗨@AlPugliese我试过了,但遇到了同样的错误,介意分享你的代码,也许我错过了什么?
0赞 Mariam Aslam 11/7/2023
@AlPugliese我的问题仍然存在!我不知道出了什么问题,它似乎提供了所有验证,但没有点击链接,我进行了您要求的更改,它似乎仍然不起作用,除了 cheerio 之外,我还可以使用其他任何东西吗?
0赞 Mariam Aslam 11/8/2023
嗨@AlPugliese我期待您的回复,这对您有什么作用,即使在添加字符串后,它也不会单击按钮 const $ = load(“验证电子邮件地址”, emailContent);

答:

1赞 Al Pugliese 11/7/2023 #1

我无法准确回答,因为缺少调试细节,但由于您无法从我的评论中解决,因此您需要查看的内容。

这完全取决于您从 .emails.then((emails: any)

错误消息说不是字符串,因此您需要查看并了解如何将 HTML 作为字符串获取emailContentemailscheerio.load(<some-html-string-here>)

  • 该名称表示已收到多封电子邮件,因此用于获取一封电子邮件emailsemails[0]

  • 您已经确认上面是正确的emails[0]assert.isTrue(emails[0].subject.indexOf("Account confirmation")

  • const body = emails[0].html应该检查一下是否

    • body是一个字符串
    • body包含链接a[href^="http://localhost:3000...

如果全部签出,请使用 ,否则需要根据变量中看到的内容进行调整。cheerio.load(body)

评论

0赞 Mariam Aslam 11/8/2023
嗨@AlPugliese我期待您的回复,这对您有什么作用,即使在添加字符串后,它也不会单击按钮 const $ = load(“验证电子邮件地址”, emailContent);