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

Browser 是否有一种编程方式来更改Cypress.io中的用户代理?,browser,e2e-testing,cypress,Browser,E2e Testing,Cypress,我有一些只在移动设备上打的广告电话。在Chrome中,我可以使用设备模式并模拟移动设备,由此产生的来自服务器的广告呼叫可以正确地根据移动设备进行定制。我不确定Chrome是如何做到这一点的,除非可能通过发送不同的用户代理 在Cypress.io文档中,它说可以在配置文件(Cypress.json)中更改用户代理。但是,我需要对桌面视口和带有移动用户代理的移动视口运行测试。有没有办法以编程方式更改用户代理 由于Cypress测试是用Javascript编写的,因此可以使用以下方法设置用户代理,例如

我有一些只在移动设备上打的广告电话。在Chrome中,我可以使用设备模式并模拟移动设备,由此产生的来自服务器的广告呼叫可以正确地根据移动设备进行定制。我不确定Chrome是如何做到这一点的,除非可能通过发送不同的用户代理


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

由于Cypress测试是用Javascript编写的,因此可以使用以下方法设置用户代理,例如:

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

然后,要更改视口,可以使用命令。在Cypress文档中,您可以找到关于如何分别组织桌面和移动测试以及如何动态测试多个视口的示例。

更新:根据这一点,Cypress 3.3.0可以在
cy.request()
cy.visit()中使用
user agent
属性

例如,如果需要,请将
userAgent
设置为Googlebot

cy.visit(url、{
标题:{
“用户代理”:“Mozilla/5.0(兼容;Googlebot/2.1+http://www.google.com/bot.html)',
}
});

Cypress 3.3.0之前的原始答案
之前(()=>{
cy.visit(网址:{
onBeforeLoad:win=>{
Object.defineProperty(win.navigator,'userAgent'{
价值:Mozilla/5.0(兼容;Googlebot/2.1+http://www.google.com/bot.html)',
});
},
});
});

其他答案不设置底层HTTP请求的
用户代理
头,只设置
win.navigator
userAgent
属性。要将
用户代理
头设置为所有HTTP请求的自定义值,可以设置:

您已经提到您不想使用
cypress.json
。用户代理可以通过以下方式按等级库文件以编程方式设置:


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

Cypress.config('userAgent'、'Mozilla/5.0(兼容;Googlebot/2.1;+))不幸的是,编程部分不起作用:谢谢,我没有幸运地找到新的答案(即使是在3.3.0+),但旧的存根起作用了。
Cypress.config('userAgent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')
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');
});