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

Ste*_*hen 3 browser e2e-testing cypress

在我们的网站上,当有人单击链接或执行某些操作时,会触发Omniture呼叫。在网络标签的Chrome DevTools中,您可以看到网络请求被触发。

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

bku*_*era 5

您应该可以cy.route用来等待并针对网络请求进行断言:

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

如果上述方法不起作用,则可能是因为该模块正在使用fetch,但尚无本机支持。但是,您可以omniture通过将其添加cy.visit()到XHR中来回退到XHR :

cy.visit('example.com', {
  onBeforeLoad: (win) => {
    win.fetch = null
  }
})
Run Code Online (Sandbox Code Playgroud)

..

或者(如您所述)您可以omniture直接监视全局

您可以在网站上的全局对象上使用cy.spy()spy例如:

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

should()由于该omniture <script>标记可能会加载,因此它会先等待对象出现,然后再尝试对其进行监视asynchronously