Как позвонить на сторонний сайт из Cypress test, чтобы получить текст изображения Captcha? - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно получить текст изображения «капча», рассчитать его и ввести значение в текстовое поле при отправке формы.Я обнаружил, что сторонняя библиотека, которая делает это.У меня вопрос, как вызвать стороннюю библиотеку (https://somesite) в тесте Cypress? Или есть какой-нибудь другой простой способ получить изображение с помощью javascript с помощью каптчи, кто-то может посоветовать, как этого добиться?

describe('Check the submission of form', function() {
      it.only('Verify the submission of form', function() {
        const getCaptcha = () => {      
            // How to call the third party url here or some where ???
            return text  // these text retured are numbers and this look like '35+12 =?'
          }
         cy.visit("testUrl")
         cy.wrap({ name: getCaptcha })   
         cy.get('input[name="textinput1"]').type('Mazda')
         cy.get('input[name="textinput2"]').clear().type('Axela')
         ....// rest of the code 
      })
    })

1 Ответ

0 голосов
/ 13 сентября 2018

Если я правильно понимаю, вы хотите посетить сайт, который вы контролируете и который использует капчу, получить изображение захвата, затем отправить его стороннему API для разрешения капчи, а затем продолжить вход на сайт.

Вы можете использовать cy.request для вызова стороннего API:

cy.request('POST', 'http://somesite', body).then((response) => {
    // do something with response.body
})

Чтобы получить изображение капчи с экрана входа в систему, вы можете использовать что-то вроде:

describe('my website', () => {
    it('should accept typing after login', () => {
        cy.visit('testURL')
        cy.get('a selector to target your #captcha img').then((captchaImg) => {
            // Now you will have the captcha image itself
            const body = { captchaImg } // prepare the body to send to the 3rd party API
            cy.request('POST', 'http://somesite', body).then((response) => {
                // Process the response to extract the field that you are interested in
                // For instance, you could pull out the string '55+20='
                let captchaText = getCaptchaText(response.body)
                let captchaAnswer = getCaptchaAnswer(captchaText)
                cy.get('captcha text input field').type(captchaAnswer)
                // You will probably need to click a submit button

                // Test the site here, now that you have logged in
                cy.get('input[name="textinput1"]').type('Mazda')
                // assert something
                cy.get('input[name="textinput2"]').clear().type('Axela')
                // assert something else     
            })
        })
    })
})

Выполнение этого дополнительного запроса каждый тест значительно замедлит ваши тесты. Поэтому лучше один раз протестировать поток входа в систему, а затем попробовать некоторые альтернативные методы, чтобы обойти поток входа в систему вашего сайта для остальных тестов. По крайней мере, вы можете попробовать поместить логику проверки, связанную с капчей, в ловушку before, а затем запустить набор тестов.

Cypress рекомендует не посещать сторонние сайты в ваших тестах по нескольким причинам, описанным в этом ответе . И они также рекомендуют против тестирования сайтов, которые вы не контролируете. Но получить доступ к стороннему API можно с помощью cy.request.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...