web-dev-qa-db-ja.com

Cypress.io Js自動化フレームワークを使用して、表示されているアラートとテキストをテストするにはどうすればよいですか?

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!')    

    })

})
10
soccerway

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!')      
    })  

    })

})
7
soccerway

これははるかに簡単で直感的な方法です。

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

これを行うstub()メソッドは、非常に煩雑で、直感的でなく、エラーが発生しやすいことがわかりました。

4
codemon

alertの公式のサイプレスソリューションであるにもかかわらず、.stub()を使用して承認された回答を得ることができませんでした。どうやら私はここだけではないので、同じボートの誰かを助ける場合に備えて私の回避策を共有したいと思いました。

@codemonの答えを拡張して、この回避策willアラートが発生しなかった場合、テストに失敗します。

   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
chatnoir

これを使用している場合: 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()
      })
0
jameseg