赛普拉斯-使用Google Recaptcha测试联系表

时间:2019-11-03 21:48:20

标签: recaptcha cypress

如何使用Google Recaptcha测试联系表?

我想测试一下“我们会尽快回复您”。消息出现。

4 个答案:

答案 0 :(得分:5)

我创建了自己的赛普拉斯命令以测试Google reCAPTCHA

Cypress.Commands.add('solveGoogleReCAPTCHA', () => {
  // Wait until the iframe (Google reCAPTCHA) is totally loaded
  cy.wait(500);
  cy.get('#g-recaptcha *> iframe')
    .then($iframe => {
      const $body = $iframe.contents().find('body');
      cy.wrap($body)
        .find('.recaptcha-checkbox-border')
        .should('be.visible')
        .click();
    });
});

我将此命令与Google给出的说明结合在一起:

https://developers.google.com/recaptcha/docs/faq#id-like-to-run-automated-tests-with-recaptcha.-what-should-i-do

因此,我必须对源代码进行一些小的更改:

export const RECAPTCHA_SITE_KEY: string = window.Cypress
  ? '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI'
  : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

答案 1 :(得分:2)

经过一些尝试,我想出了这个:

Cypress.Commands.add('confirmCaptcha', function () {
  cy.get('iframe')
    .first()
    .then((recaptchaIframe) => {
      const body = recaptchaIframe.contents()
      cy.wrap(body).find('.recaptcha-checkbox-border').should('be.visible').click()
    })
})

还要确保您的 cypress.json 文件中有这个,否则无法访问 iFrame:

"chromeWebSecurity": false

答案 2 :(得分:0)

Cypress在其最佳实践页面上有很好的建议:https://docs.cypress.io/guides/references/best-practices.html#Visiting-external-sites

基本上可以归结为这一点:如果它不是您自己的应用程序,则将其存根。信任第三者测试他们自己的页面。

答案 3 :(得分:0)

这对我有用,不需要cy.wait(500)或其他固定时间,因为它使用its中的柏树隐式等待来加载iframe内容。

         cy.get('iframe')
            .first()
            .its('0.contentDocument.body')
            .should('not.be.undefined')
            .and('not.be.empty')
            .then(cy.wrap)
            .find('#recaptcha-anchor')
            .should('be.visible')
            .click();

这也可以作为自定义命令添加。它基于以下博客文章:https://www.cypress.io/blog/2020/02/12/working-with-iframes-in-cypress/