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

时间:2018-06-12 15:30:16

标签: browser e2e-testing cypress

在我们的网站上,当有人点击某个链接或采取某些操作时,我们会触发Omniture调用。在网络标签的Chrome DevTools中,您可以看到要触发的网络请求。

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

2 个答案:

答案 0 :(得分:3)

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

cy.route({
  url:'*omniture.com*',
  method: 'POST',
  onRequest: (xhr) => {
    expect(xhr.request.body).to.eql('somebody')
  }
})

如果上述方法无效,可能是因为该模块使用fetch ,但尚未获得原生支持。但是,您可以通过将其添加到omniture cy.visit()回退到XHR:

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

...

或(正如您所提到的)您可以直接监视omniture全局

您可以在网站上的全局对象上使用cy.spy()spy,这是一个示例:

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

should()会在尝试窥探对象之前等待对象存在,因为omniture <script>标记可能会加载asynchronously

答案 1 :(得分:0)

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

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