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

时间:2018-06-26 17:52:16

标签: browser e2e-testing cypress

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

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

4 个答案:

答案 0 :(得分:4)

现在,赛普拉斯支持在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');
});

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

答案 1 :(得分:0)

由于赛普拉斯测试是用Java编写的,因此您可以使用Object.defineProperty()方法来设置用户代理,例如:

Object.defineProperty(navigator, 'userAgent', {
    get: function () { return 'Mozilla/5.0 (Windows NT 6.2; WOW64; 
    rv:28.0) Gecko/20100101 Firefox/28.0)'; }
});

然后,要更改视口,可以使用cy.viewport()命令。在赛普拉斯文档here中,您可以找到有关如何分别组织桌面测试和移动测试以及如何动态测试多个视口的示例。

答案 2 :(得分:0)

参加聚会的时间不多,但是例如,如果需要,请将userAgent设置为 Googlebot

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)',
            });
        },
    });
});

答案 3 :(得分:0)

其他答案不设置基础HTTP请求的User-Agent头,仅设置userAgent的{​​{1}}属性。要将win.navigator标头设置为所有HTTP请求的自定义值,可以设置userAgent configuration option

User-Agent

您已经提到您不想使用{ // rest of your cypress.json... "userAgent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" } 。可以使用Cypress.config()通过编程方式针对每个规范文件设置用户代理:

cypress.json