在Cypress.io中,有没有编程的方式来更改用户代理?

Ste*_*hen 6 browser e2e-testing cypress

我有一些仅在移动设备上进行的广告致电。在Chrome浏览器中,我可以使用“设备模式”并模拟移动设备,并且来自服务器的广告调用已正确地针对移动设备进行了定制。我不确定Chrome如何做到这一点,除非可能会发送其他用户代理。

在Cypress.io文档中,它说可以在配置文件(Cypress.json)中更改用户代理。但是,我需要先对桌面视口进行测试,然后再对具有移动用户代理的移动视口进行测试。有没有办法以编程方式更改用户代理?

Mar*_*rda 12

更新:根据https://github.com/cypress-io/cypress/issues/3873,由于 Cypress 3.3.0user-agent在 acy.request()cy.visit().

例如,如果您需要设置userAgentGooglebot

cy.visit(url, {
    headers: {
        'user-agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
    }
});
Run Code Online (Sandbox Code Playgroud)

Cypress 3.3.0 之前的原始答案

before(() => {
    cy.visit(url, {
        onBeforeLoad: win => {
            Object.defineProperty(win.navigator, 'userAgent', {
                value: 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
            });
        },
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我没有运气得到新的答案(即使在 3.3.0+ 上)。但旧存根有效。 (2认同)

Mal*_*lay 5

截至 2021 年 8 月 12 日更新:

看来您无法再更改用户代理: https: //docs.cypress.io/api/cypress-api/config#Notes


旧答案:

现在 cypress 支持在 cy.visit 和 cy.request 的标头中传递用户代理:

it('Verify Social Sharing Meta Tags', () => {
  cy.visit(portalURL + '/whats_new/140', {
    headers: {
      'user-agent': 'LinkedInBot/1.0 (compatible; Mozilla/5.0; Apache-HttpClient +http://www.linkedin.com)',
    }
  });

  cy.document().get('head meta[name="og:type"]')
    .should('have.attr', 'content', 'website');
});
Run Code Online (Sandbox Code Playgroud)

https://on.cypress.io/changelog#3-3-0

  • 似乎您无法在运行时更改 userAgent https://docs.cypress.io/api/cypress-api/config#Notes (2认同)