#javascript #github #testing #e2e-testing #testcafe
#javascript #github #тестирование #e2e-тестирование #testcafe
Вопрос:
Я новичок в тестах E2E и хочу выполнить регистрацию e2e для тестирования учетной записи github с помощью TestCafe, но я получаю эту ошибку при запуске теста:
ExternalAssertionLibraryError {
code: 'E53',
isTestCafeError: true,
callsite:
CallsiteRecord {
filename: 'TestCafe\authentication.page.js',
lineNum: 152,
callsiteFrameIdx: 6,
stackFrames:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
CallSite {},
[Object],
[Object],
[Object],
[Object],
CallSite {} ],
isV8Frames: true },
errMsg: 'AssertionError: expected false to be truthy'
}
это мой код authentication.page.js
:
import { Selector, t } from 'testcafe';
export default class AuthenticationPage {
constructor(){
//add page elements to our page model
//select sign up form elements
this.username = Selector('#user_login');
this.user_email= Selector('#user_email');
this.user_password = Selector('#user_password');
this.signup_form = Selector('#signup-form');
this.registerBtn = Selector('#signup_button');
//continue button
this.continue_btn = Selector('.btn.btn-primary.js-choose-plan-submit');
}
//create a new github account
async register(){
/**
* Step 1:
* Set up your account
* first thing to do is checking for the form
*/
await t
.setTestSpeed(0.1)
.expect(this.signup_form.exists).ok()
.expect(this.signup_form.getAttribute('method')).eql('post')
.expect(this.signup_form.getAttribute('action')).eql('/join')
.catch((error) => {
console.error(error);
});
// input elements
await t
.setTestSpeed(0.1)
// username input check
.expect(this.username.exists).ok()
.expect(this.username.getAttribute('type')).eql('text')
.expect(this.username.value).eql('')
// email input check
.expect(this.user_email.exists).ok()
.expect(this.user_email.getAttribute('type')).eql('text')
.expect(this.user_email.value).eql('')
// password input check
.expect(this.user_password.exists).ok()
.expect(this.user_password.getAttribute('type')).eql('password')
.expect(this.user_password.value).eql('')
.catch((error) => {
console.error(error);
});
// fill out the inputs
await t
.setTestSpeed(0.1)
.typeText(this.username, 'some username')
.expect(this.username.getAttribute('class')).eql('form-control is-autocheck-successful')
.typeText(this.user_email, 'some email')
.expect(this.user_email.getAttribute('class')).eql('form-control is-autocheck-successful')
.typeText(this.user_password, 'some password')
.catch((error) => {
console.log(error);
});
// Captcha verification
await t
.expect(await Selector('svg[class="octicon octicon-check text-green"]').exists).ok()
.catch((error) => {
console.log(error);
});
await t
.setTestSpeed(0.1)
// Input data check
.expect(this.username.value).contains('some username')
.expect(this.user_email.value).contains('some email')
.expect(this.user_password.value).contains('some password')
// Singup Check
.expect(this.registerBtn.exists).ok()
.expect(this.registerBtn.getAttribute('type')).eql('submit')
.click(this.registerBtn)
.catch((error) => {
console.error(error);
});
/**
* Step 2:
* Choose your plan
*/
await t
.expect(this.continue_btn.exists).ok()
.expect(this.continue_btn.getAttribute('type')).eql('submit')
.click(this.continue_btn)
.catch((error) => {
console.log(error);
});
/**
* Step 3:
* Tailor your experience
*/
const prog_exp_level = Selector('#answers_98_choice_476');
const github_uses_plan = Selector('#answers_99_choice_468');
const describe = Selector('#answers_100_choice_472');
const submit_btn = Selector('input[type="submit"]')
await t
.setTestSpeed(0.1)
.expect(prog_exp_level.exists).ok()
.expect(prog_exp_level.getAttribute('type')).eql('radio')
.click(prog_exp_level)
.expect(github_uses_plan.exists).ok()
.expect(github_uses_plan.getAttribute('type')).eql('checkbox')
.click(github_uses_plan)
.expect(github_uses_plan.checked).ok()
.expect(describe.exists).ok()
.expect(describe.getAttribute('type')).eql('radio')
.click(describe)
.expect(submit_btn.exists).ok()
.click(submit_btn)
.catch((error) => {
console.log(error);
});
}
}
и в этом файле я вызвал функцию register register.test.js
:
// import the testcafe module
import { Selector, ClientFunction} from 'testcafe';
import AuthenticationPage from './authentication.page';
const page = new AuthenticationPage();
//declare a fixture
fixture `Github Signup Test`
.page `https://github.com/join`;
//create login test code
test
.before( async t => {
const link = await Selector('a').withText('Sign up');
if(await link.exists amp;amp; await link.visible){
await t
.click(link)
.catch((error) => {
console.error(error);
});
}
})
('register test', async t => {
await page.register();
})
.after( async t => {
console.log('test..');
});
во время выполнения теста я вижу, что проверка captcha не может быть проверена.
Мне нужно знать, как я могу исправить эту проблему, пожалуйста
есть идеи для помощи?
Комментарии:
1. Пожалуйста, поправьте меня, если я ошибаюсь: ваш скрипт пытается автоматически зарегистрировать новую учетную запись Github? Т.е. это бот-генератор учетных записей на Github? И вы спрашиваете, как обмануть captcha, чтобы убедиться, что это не бот?
2. Не могли бы вы более подробно описать, чего вы хотите достичь и как, вместо того, чтобы просто публиковать целые пакеты кода?
3. @RolfBly точно, я должен автоматически создать пользователя через testcafe в github, и это показывает мой скрипт, но когда я запускаю тест через: testcafe chrome register.test.js Я получил ошибку, вы можете попробовать тест, если хотите, просто установите TestCafe framework, затем запустите эту команду:
testcafe chrome register.test.js
вы можете увидеть, как тест может создать новую учетную запись github в браузере4. @Hanae Рассматривали ли вы этику создания бота, который препятствует защите от ботов?
Ответ №1:
Жужжание…,
-
прежде всего, captcha вложен в два iframe. Вы должны переключиться на эти iframes, как описано здесь.
-
Затем вы должны сделать скриншот captcha, как описано здесь;
-
Затем вам нужно создать и обучить нейронную сеть распознавать, как размещено изображение: вы можете использовать TensorFlow для этой цели
Комментарии:
1. зачем использовать Tensorflow, это всего лишь простой тест для создания учетной записи github
2. @hanae, простой тест не означает легкий тест: выполнение такого теста сделает вас героем.
3. да, я знаю, не могли бы вы, пожалуйста, помочь мне, как это сделать?
4. @hanae, да, конечно, дай мне немного времени на настройку нейронной сети tensorflow, и когда все будет готово, я отправлю тебе пинг