是否有一种以编程方式更改Cypress.io中的用户代理?

问题描述 投票:5回答:3

我有一些广告调用只能在移动设备上进行。在Chrome中,我可以使用设备模式并模拟移动设备,从服务器生成的广告调用可以正确定制到移动设备。我不确定Chrome是如何做到这一点的,除非可能通过发送不同的用户代理。

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

browser e2e-testing cypress
3个回答
1
投票

其他答案没有设置底层HTTP请求的User-Agent头,只是userAgentwin.navigator属性。要将User-Agent标头设置为所有HTTP请求的自定义值,您可以设置userAgent configuration option

{
  // rest of your cypress.json...
  "userAgent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
}

你提到过你不想使用cypress.json。可以使用Cypress.config()按照规范文件以编程方式设置用户代理:

Cypress.config('userAgent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')

0
投票

由于赛普拉斯测试是用Javascript编写的,因此您可以使用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中,您可以找到有关如何单独组织桌面与移动测试以及如何动态测试多个视口的示例。


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)',
            });
        },
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.