我们如何使用Cypress.io Js自动化框架测试警报和内部显示的文本?

时间:2018-08-11 00:03:01

标签: javascript cypress

我们如何使用Cypress.io Js自动化框架测试警报和内部显示的文本?我无法在赛普拉斯文档中找到相关示例,请告知。

describe('Test an alert and the text displaying', function() {
it('Verify alert and its text content', function(){
    cy.visit('http://www.seleniumeasy.com/test/javascript-alert-box-demo.html')     
    cy.get('button').contains('Click me!').click()
    cy.on ('window:alert', 'I am an alert box!')    

    })

})

4 个答案:

答案 0 :(得分:6)

按照Richard Matsen的建议,使用cy.stub()方法找出答案:

describe('Test an alert and the text displaying', function() {
it('Verify alert and its text content', function(){
    cy.visit('http://www.seleniumeasy.com/test/javascript-alert-box-demo.html')    

    const stub = cy.stub()  
    cy.on ('window:alert', stub)
    cy
    .get('button').contains('Click me!').click()
    .then(() => {
      expect(stub.getCall(0)).to.be.calledWith('I am an alert box!')      
    })  

    })

})

答案 1 :(得分:2)

这是一种更简单,更直观的方法:

cy.on('window:alert', (str) => {
  expect(str).to.equal(`This is an alert box!`)
})

我发现这样做的stub()方法太凌乱,不直观且容易出错。

答案 2 :(得分:2)

尽管它是.stub()的赛普拉斯官方解决方案,但我无法使用alert获得可接受的答案。显然我在这里并不孤单,所以我想与我分享解决方法,以防它帮助同一条船上的某人。

扩展@codemon的答案,如果未发出警报,此变通方法 将使测试失败:

   var alerted = false;
   cy.on('window:alert', msg => alerted = msg);

   cy.get('button').contains('Click me!').click() //or whatever code that triggers alert
   .then( () => expect(alerted).to.match(/clicked!/); //or whatever regex is appropriate

答案 3 :(得分:0)

如果您恰巧使用的是alert.js,那么也许我可以为您省去一些麻烦。尝试这样的操作来查找未在DOM中注册的元素:

// for example, a button in the modal that needs clicking

// the event that fires the alert
 cy.get('<some element>').click()

 cy.window().then(win => {
        const el = win.Alert.$(`<whatever element you're looking for>`)
        cy.wrap(el)
          .find('button')
          .contains('Confirm')
          .click()
      })