我需要获取“验证码”图像的文本并进行计算,然后在提交表单时在文本字段中输入值。我发现有一个第三方库可以做到这一点。我的问题是如何在赛普拉斯测试中调用第三方库(https://somesite)?还是有其他简单的方法可以使用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
})
})
答案 0 :(得分:1)
如果我的理解正确,您想访问一个使用验证码的您控制的网站,获取捕获的图像,然后将其发送给第三方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挂钩中,然后运行一系列测试。
赛普拉斯出于某些原因,建议不要在测试中访问第三方网站,这些原因记录在this answer中。并且他们还建议您对不受控制的网站进行测试。但是,可以使用cy.request
来访问第三方API。