اصل و نسب

ساخت وبلاگ

در یک آزمایش واحد از چندین حوزه با منشاء مختلف بازدید کنید.

در استفاده عادی ، یک آزمایش سرو فقط ممکن است دستورات را با یک منشاء واحد اجرا کند ، محدودیتی که توسط ویژگی های امنیتی وب استاندارد مرورگر تعیین می شود. دستور cy. origin () به آزمایشات شما اجازه می دهد تا این محدودیت را دور بزنند.

کد انسدادی شخص ثالث

به طور پیش فرض Cypress از طریق جریان های پاسخ از سرور شما در شخص اول.html و . js پرونده ها جستجو می کند و کدی را جایگزین می کند که با الگوهای متداول در FrameBusting مطابقت دارد. هنگام استفاده از دستور cy. origin () ، کد شخص ثالث نیز ممکن است برای تکنیک های قاب بندی اصلاح شود. این امر می تواند با تنظیم پرچم ExperimalalModifyObstructiveThirdPartyCode به True در پیکربندی Cypress فعال شود. اطلاعات بیشتر در مورد این پرچم آزمایشی را می توان در صفحه امنیت وب ما یافت.

نحو

استفاده

استدلال

URL (رشته)

URL که منشأ ثانویه را که در آن پاسخ به تماس است ، مشخص می کند. این حداقل باید شامل یک نام میزبان باشد و همچنین ممکن است شامل پروتکل ، شماره پورت و مسیر باشد. نام میزبان دقیقاً باید با منشأ ثانویه ، از جمله همه زیر دامنه ها مطابقت داشته باشد. پارامترهای پرس و جو پشتیبانی نمی شوند.

این استدلال از دو طریق استفاده خواهد شد:

این منحصر به فرد منشأ ثانویه را مشخص می کند که در آن دستورات موجود در پاسخ به تماس اجرا می شوند. Cypress خود را به این منشاء تزریق می کند ، و سپس کد آن را برای ارزیابی در آن مبدا ارسال می کند ، بدون آنکه خط مشی همان مرورگر را نقض کند.

این پایه را در پیکربندی جهانی شما در حالی که در پاسخ به تماس است ، غلبه می کند. بنابراین Cy. Visit () و Cy. Request () از این URL به عنوان پیشوند استفاده می کنند ، نه پایه پیکربندی شده.

گزینه ها (شی)

برای کنترل رفتار cy. origin () در یک شی گزینه عبور کنید.

 

گزینه شرح
استدلال شیء JavaScript ساده که از منشأ اولیه به منشأ ثانویه سریال می شود و ارسال می شود ، جایی که آن را رها می کند و به عنوان اولین و تنها استدلال خود به عملکرد پاسخ به تماس منتقل می شود.

هدف ARGS تنها مکانیسمی است که داده ها ممکن است به پاسخ به تماس منتقل شوند ، پاسخ به تماس بسته نمی شود و دسترسی به متن JavaScript را که در آن اعلام شده است ، حفظ نمی کند. مقادیر منتقل شده به ARG ها باید سریال باشند.

Callbackfn (عملکرد)

تابع حاوی دستوراتی که باید در مبدا ثانویه اجرا شود.

این تابع پیچیده می شود ، به نمونه سرو در منشأ ثانویه ارسال می شود و ارزیابی می شود. اگر گزینه ARGS مشخص شود ، شیء Args Deserialized به عنوان اولین و تنها استدلال خود به عملکرد منتقل می شود.

تعدادی محدودیت در دستورات اجرا شده در داخل پاسخ به تماس وجود دارد ، لطفاً برای لیست کامل به بخش محدودیت های پاسخ به تماس مراجعه کنید.

بازده - محصول

  • cy. origin () مقدار حاصل از آخرین دستور cypress را در عملکرد پاسخ به تماس می دهد.
  • اگر پاسخ به تماس حاوی دستور سرو باشد ، cy. origin () مقدار بازگشت عملکرد را به دست می آورد.
  • در هر یک از دو مورد فوق ، اگر مقدار قابل سریال نباشد ، تلاش برای دسترسی به مقدار بازده خطایی خواهد داشت.

مثال ها

با استفاده از داده های پویا در منشاء ثانویه

تماس تلفنی در داخل نمونه کاملاً جداگانه از سرو انجام می شود ، بنابراین استدلال ها باید با استفاده از الگوریتم کلون ساختاری به نمونه دیگر منتقل شوند. رابط این مکانیسم گزینه Args است.

ارائه یک مقدار

مقادیر برگردانده شده یا از عملکرد پاسخ به تماس باید سریال باشند یا به منشأ اصلی بازگردانده نشوند. به عنوان مثال ، موارد زیر کار نمی کند:

در عوض ، شما باید صریحاً یک مقدار سریال را به دست آورید:

پیمایش به منشأ ثانویه با cy. visit

هنگام حرکت به منشاء ثانویه با استفاده از cy. visit () ، می توانید قبل از یا بعد از بلوک Cy. origin حرکت کنید. خطاها دیگر بر روی ناوبری متقاطع پرتاب نمی شوند ، بلکه در عوض وقتی دستورات با یک صفحه بین المللی متقاطع تعامل دارند.

در اینجا BaseUrl در داخل Cy. Origin () پاسخ به www.acme.com و پیش فرض پروتکل به HTTPS تنظیم شده است. هنگامی که cy. visit () با مسیر/تاریخ/بنیانگذار خوانده می شود ، این سه نفر برای تهیه https://www.acme.com/history/founder به هم پیوسته اند.

ناوبری جایگزین

در اینجا از صفحه متقاطع قبل از بلوک cy. origin بازدید می شود ، اما هرگونه تعامل با پنجره در داخل بلوک انجام می شود که می تواند با صفحه متقاطع ارتباط برقرار کند

در اینجا cy. get ('h1') به دلیل عدم تلاش برای تعامل با یک صفحه مرکزی با منزل در خارج از بلوک cy. origin ، به دلیل محدودیت های "همان منبعی" ، زمینه جاوا اسکریپت "محلی" نمی تواند ارتباط برقرار کند.'Acme.com'.

پیمایش به منشأ ثانویه با UI

پیمایش به منشأ ثانویه با کلیک روی یک لینک یا دکمه در مبدا اصلی پشتیبانی می شود.

پیمایش به چندین ریشه ثانویه پشت سر هم

تماس های برگشتی ممکن است خود حاوی تماس های cy. origin () نباشند ، بنابراین هنگام بازدید از چندین ریشه ، این کار را در سطح بالای آزمایش انجام دهید.

نسخه آینده Cypress امکان استفاده از تماس های Cy. origin () تو در تو را فراهم می کند.

فرمان سفارشی SSO

یک نیاز بسیار متداول ورود به سایت قبل از انجام آزمایش است. اگر ورود به سیستم خود تمرکز خاصی برای آزمون نیست ، خوب است که این قابلیت را در یک دستور سفارشی ورود به سیستم قرار دهید ، بنابراین لازم نیست این کد ورود را در هر آزمون کپی کنید. در اینجا یک مثال ایده آل از نحوه انجام این کار با Cy. origin () آورده شده است.

قبل از هر آزمایش ، باید یک جریان ورود به سیستم کامل انجام شود. تاکنون می توانید با قرار دادن کد ورود به سیستم در اولین آزمون پرونده خود ، این مشکل را حل کنید ، سپس تست های بعدی را با استفاده مجدد از همان جلسه انجام دهید.

با این حال ، این دیگر امکان پذیر نیست ، زیرا اکنون همه وضعیت جلسه بین آزمایشات پاک شده است. بنابراین برای جلوگیری از این سربار توصیه می کنیم از دستور cy. session () استفاده کنید ، که به شما امکان می دهد اطلاعات جلسه را به راحتی ذخیره کرده و از آن استفاده کنید. بنابراین اکنون بیایید دستور ورود به سیستم سفارشی خود را با Cy. Session () برای یک جریان کامل ورود به سیستم با ذخیره سازی جلسه و اعتبار سنجی افزایش دهیم. بدون مسخره ، بدون راه حل ، بدون افزونه های شخص ثالث!

بیشتر بدانید

نحوه آزمایش چندین ریشه

در این ویدئو ما نحوه تست چندین ریشه را در یک تست واحد طی می کنیم. ما همچنین به نحوه استفاده از دستور cy. session () برای ذخیره اطلاعات جلسه و استفاده مجدد از آن در آزمایشات می پردازیم.

یادداشت

سریال سازی

Cypress هنگام ورود به یک بلوک Cy. origin () () خود را در زمان اجرا ، با تمام تنظیمات پیکربندی خود ، به منشأ درخواستی تزریق می کند و ارتباط دو طرفه را با آن نمونه تنظیم می کند. این مدل هماهنگی مستلزم آن است که هر داده ای که از یک نمونه به نمونه دیگر ارسال شود برای انتقال سریال شود. درک این نکته که متغیرهای موجود در پاسخ به تماس با دامنه خارج از پاسخ به اشتراک نمی گذارند بسیار مهم است. به عنوان مثال این کار نخواهد کرد:

در عوض ، متغیر باید صریحاً با استفاده از گزینه args وارد پاسخ به تماس شود:

Cypress از الگوریتم کلون ساختاری برای انتقال گزینه Args به منشأ ثانویه استفاده می کند. این تعدادی از محدودیت ها را در مورد داده هایی که ممکن است در پاسخ به تماس منتقل شوند ، معرفی می کند.

وابستگی / کد اشتراک گذاری

ماژول ES Dynamic Import () و/یا Commonjs () مورد نیاز () را می توان در پاسخ به تماس استفاده کرد تا بسته های NPM و سایر پرونده ها را شامل شود.

با استفاده از واردات () و نیاز () در پاسخ به تماس ، نیاز به پرچم ExperimentalOrigindEpendies در پیکربندی سرو و استفاده از نسخه 5. 15. 0 یا بیشتر از @Cypress/WebPack-Preprocessor دارد. پردازنده @Cypress/WebPack-Processor به طور پیش فرض در Cypress گنجانده شده است ، اما اگر پروژه شما نسخه خود را در پیکربندی Cypress نصب می کند ، مطمئن شوید که نسخه 5. 15. 0 یا بیشتر است.

در صورت استفاده از نسخه قدیمی صفحه وب یا پیش پردازنده متفاوت ، خطایی را مشاهده خواهید کرد که شامل متن زیر است:

استفاده از نیاز () یا واردات () برای وابستگی ، نیاز به فعال کردن پرچم ExperimentalOrigindepencendies و استفاده از آخرین نسخه @Cypress/WebPack-Preprocessor دارد.

استفاده از افزونه Node_Modules در حال حاضر با استفاده از نیاز () یا واردات () در پاسخ به تماس ، در حال حاضر پشتیبانی نمی شود. ما پیش بینی می کنیم که پشتیبانی از شماره شماره 24976 را اضافه کنیم.

مثال

دستورات سفارشی

این امر باعث می شود تا دستورات سفارشی بین تست هایی که در ریشه های اولیه و ثانویه اجرا می شوند ، به اشتراک بگذارید. ما این الگوی را برای تنظیم فایل پشتیبانی خود و تنظیم دستورات سفارشی برای اجرای در پاسخ به cy. origin () توصیه می کنیم:

زمینه اعدام مشترک

زمینه اعدام JavaScript بین تماس های Cy. origin () که با همان منشأ مشترک هستند ، ادامه دارد. این می تواند برای به اشتراک گذاشتن کد بین تماس های پی در پی cy. origin () استفاده شود.

محدودیت های پاسخ به تماس

به دلیل نحوه انتقال و اجرای پاسخ به تماس ، محدودیت های خاصی در مورد اینکه چه کد ممکن است در داخل آن اجرا شود وجود دارد. به طور خاص ، دستورات Cypress در صورت استفاده در پاسخ به تماس ، خطاهایی را به وجود می آورند:

محدودیت های دیگر

سناریوهای آزمایش دیگری وجود دارد که در حال حاضر تحت پوشش Cy. origin () قرار نمی گیرند:

  • نمی تواند دستورات را در یک پنجره مرورگر متفاوت اجرا کند
  • نمی تواند دستورات را در یک برگه مرورگر متفاوت اجرا کند
  • نمی تواند دستورات را درون یک عنصر اجرا کند

با این حال ، پشتیبانی از نقشه راه ما برای گنجاندن در نسخه آینده Cypress است.

کتاب آموزش بورس...
ما را در سایت کتاب آموزش بورس دنبال می کنید

برچسب : نویسنده : محسن زنجانچی بازدید : <-PostHit-> تاريخ : دوشنبه 25 ارديبهشت 1402 ساعت: 16:11