تايبسكريبت - يفشل Testcafe والمصادقة بواسطة مايكروسوفت في إعادة التوجيه أثناء تدفق المصادقة
لذا أنا أكتب سكريبت اختبار لـ Testcafe لتطبيقنا على الويب وأيضًا للتعرف على TypeScript. ما أفعله أساسًا هو أن لدي LoginPage.ts، وLandingPage.ts (غير متعلق بهذه المشكلة)، وLandingPageTests.ts (الذي يحتوي على الاختبارات الفعلية).
يحتوي التطبيق على سير مصادقة يستخدم تسجيل الدخول عبر مايكروسوفت. لذلك، يقوم البرنامج النصي بالنقر على زر تسجيل الدخول الخاص بمايكروسوفت من هذا التطبيق، ويملأ النماذج ببريدي الإلكتروني، ثم يُدخل كلمة المرور على صفحة المنظمة، وينقر على نعم للسؤال حول البقاء مسجلاً للدخول من صفحة تسجيل الدخول الخاصة بمايكروسوفت، ثم يجب أن يحدث إعادة التوجيه من https://login.microsoftonline.com/kmsi?sso_reload=true، لكن وجهة إعادة التوجيه ترفض ذلك برمز خطأ 500 (موضح في أدوات المطور).
سألت مطورًا عن هذا وقال إن رمز الوصول قد تم تداوله بالفعل في العملية، وهو أمر غريب. لا يمكنه مساعدتي أكثر من ذلك.
لقد بحثت كثيراً في جوجل بالأمس واليوم، لكن المواضيع حول هذا كانت إما مغلقة أو غير مناسبة لنهجي.
هل يمكن لأي شخص أن يوجهني في الاتجاه الصحيح، عن كيفية تغيير السكربت ليحدث إعادة التوجيه؟ أنا لست خبيرًا في TestCafe ولا TypeScript. أدناه الملفات ذات الصلة، وقد تمت إزالة البيانات الحساسة. لا أعرف ما إذا كنت أفعل شيئًا خاطئًا، ربما اخترت المهنة الخاطئة. :(
صفحةتسجيلالدخول.ts:
import { Selector, t } from 'testcafe';
export default class LoginPage {
private microsoftButton = Selector('span').withText('MICROSOFT');
private emailField = Selector('#i0116');
private nextBtn = Selector('#idSIButton9');
private passwordField = Selector('#passwordInput');
private signInBtn = Selector('#submitButton');
private staySignedIn = Selector('#idSIButton9');
async login (username : string, password : string){
await t
.setTestSpeed(1)
.click(this.microsoftButton)
.maximizeWindow()
.typeText(this.emailField, username, {paste : true})
.click(this.nextBtn)
.typeText(this.passwordField, password)
.click(this.signInBtn)
.click(this.staySignedIn)
};
};
اختباراتصفحةالتحميل.ts:
import LoginPage from './pages/LoginPage';
import LandingPage from './pages/LandingPage';
const loginPage = new LoginPage();
const landingPage = new LandingPage();
const username = 'removed';
const password = 'removed';
fixture`removed Landing page`
.page`removed`
.beforeEach(async (t) => {
await loginPage.login(username, password)
})
.afterEach(async (t) => {
await landingPage.logout()
});
test(not really relevant as the login part fails)
الإجابة رقم 1
شغّل السكربت بهذا الشكل وسيعمل: node --max-http-header-size=1024000 ./node_modules/testcafe/bin/testcafe.js chrome <السكربت الخاص بك