Browser 使用Cypress.io检查传出的浏览器网络呼叫

Browser 使用Cypress.io检查传出的浏览器网络呼叫,browser,e2e-testing,cypress,Browser,E2e Testing,Cypress,在我们的网站上,我们有Omniture呼叫,当有人点击链接或采取某些行动时会被触发。在Chrome DevTools的网络选项卡中,您可以看到正在触发的网络请求 是否有办法让Cypress.io捕获传出的网络请求,以便我们可以检查/解析URL?与此等效的是类似于webdriver设置的Browsermob代理。我想使用Cypress.io告诉它单击链接,但我想通过浏览器检查传出的网络请求。我们找到了解决Omniture问题的方法。请求URL存储在附加到浏览器窗口对象的对象的Omniture属性中

在我们的网站上,我们有Omniture呼叫,当有人点击链接或采取某些行动时会被触发。在Chrome DevTools的网络选项卡中,您可以看到正在触发的网络请求


是否有办法让Cypress.io捕获传出的网络请求,以便我们可以检查/解析URL?与此等效的是类似于webdriver设置的Browsermob代理。我想使用Cypress.io告诉它单击链接,但我想通过浏览器检查传出的网络请求。

我们找到了解决Omniture问题的方法。请求URL存储在附加到浏览器窗口对象的对象的Omniture属性中。使用cy.window()可以获取窗口对象并访问此属性,还可以使用节点模块(querystring)解析查询字符串

我们在Cypress.io中找不到任何本机方法来检查网络请求。

您应该能够使用来等待并对网络请求进行断言:

cy.route({
  url:'*omniture.com*',
  method: 'POST',
  onRequest: (xhr) => {
    expect(xhr.request.body).to.eql('somebody')
  }
})
如果上述操作不起作用,可能是因为模块正在使用fetch,而fetch还没有本机支持。但是,您只需将
omniture
回退到XHR,方法是将其添加到您的
cy.visit()

cy.visit('example.com', {
  onBeforeLoad: (win) => {
    win.fetch = null
  }
})

或者(如您所述)您可以直接监视
omniture
global 您可以使用
cy.spy()
对站点上的全局对象执行
spy
,下面是一个示例:

cy.visit('example.com')
cy.window().should('have.property', 'omnitureRequest').then(win=>{
  cy.spy(win, 'omnitureRequest')
})

应该()
将在尝试监视对象之前等待对象出现,因为
omniture
标记可以异步加载

感谢您提供的信息。进行omniture调用的代码是一个可供使用的黑盒。正如您所说,我们只想监视请求并确保请求的格式正确Omniture对象的属性是需要解析的URL字符串,因此我们可能仍然需要“querystring”节点模块。我们将看看这些想法是否对我们有用。我的团队中有人尝试了cy.route()解决方案,问题是该方法在请求中不返回任何查询参数。我们的Omniture请求是一个带有查询参数的URL。因此,我猜cy.route()不考虑查询参数。