Protocol Commands
WebdriverIO یک فریمورک اتوماسیون است که برای کنترل یک remote agent، به عنوان مثال برای یک مرورگر، دستگاه تلفن همراه یا تلویزیون، بر پروتکلهای مختلف اتوماسیون متکی است. بر اساس دستگاه ریموت، پروتکل های مختلفی وارد بازی می شوند. این دستورها بسته به اطلاعات session توسط سرور remote (مثلاً درایور مرورگر) به شیء Browser یا Element اختصاص داده می شوند.
در داخل WebdriverIO تقریباً برای تمام تعاملات با عامل راه دور از دستورات پروتکل استفاده می شود. با این حال دستورات اضافی اختصاص داده شده به Browser یا Element Object استفاده از WebdriverIO را ساده می کند، به عنوان مثال دریافت متن یک element با استفاده از دستورات پروتکل به شکل زیر است:
const searchInput = await browser.findElement('css selector', '#lst-ib')
await client.getElementText(searchInput['element-6066-11e4-a52e-4f735466cecf'])
با استفاده از دستورات راحت Browser یا Element Object می توان دستورات را به مورد زیر کاهش داد:
$('#lst-ib').getText()
در ادامه هر پروتکل جداگانه توضیح داده میشود.
پروتکل WebDriver
پروتکل WebDriver یک استاندارد وب برای خودکارسازی مرورگر است. این استاندارد، برخلاف برخی دیگر از ابزارهای E2E، تضمین می کند که اتوماسیون را می توان در مرورگر واقعی که توسط کاربران شما استفاده می شود، به عنوان مثال فایرفاکس، سافاری و کروم و مرورگر مبتنی بر Chromium مانند Edge، و نه تنها در موتورهای مرورگر، بلکه به عنوان مثال WebKit، که بسیار متفاوت هستند، انجام داد.
مزیت استفاده از پروتکل WebDriver در مقابل پروتکلهای اشکال زدایی مانند Chrome DevTools این است که شما مجموعهای از دستورات دارید که اجازه میدهد با مرورگر به طور یکسان در تمام مرورگرها تعامل داشته باشید که احتمال ناپایداری تست ها را کاهش میدهد. علاوه بر این، توانایی های این پروتکل را برای مقیاس پذیری گسترده با استفاده از ارائه دهندگان خدمات ابری مانند Sauce Labs، BrowserStack و غیره ارائه می دهد.
پروتکل WebDriver Bidi
پروتکل WebDriver Bidi نسل دوم این پروتکل است و در حال حاضر توسط اکثر سازندگان مرورگر بر روی آن کار می شود. این پروتکل در مقایسه با نسخه قبلی خود از یک ارتباط دو جهته (به همین دلیل "Bidi") بین فریمورک و دستگاه remote پشتیبانی می کند. علاوه بر این، این پروتکل موارد پایه ای دیگری را برای درون نگری بهتر مرورگر و برای خودکارسازی بهتر برنامه های تحت وب در مرورگر معرفی می کند.
با توجه به اینکه این پروتکل در حال حاضر در حال ساخت است، ویژگی های بیشتری به مرور زمان اضافه می شود و توسط مرورگر پشتیبانی خواهد شد. اگر از دستورات راحت WebdriverIO استفاده کنید، هیچ چیز برای شما تغییر نخواهد کرد. WebdriverIO از قابلیتهای پروتکل جدید به محض اینکه در مرورگر موجود و پشتیبانی شوند، استفاده خواهد کرد.
Appium
پروژه Appium قابلیت هایی را برای خودکارسازی موبایل، دسکتاپ و سایر انواع دستگاه های IoT فراهم می کند. در حالی که WebDriver بر مرورگر و وب تمرکز می کند، چشم انداز Appium استفاده از همان رویکرد اما برای هر دستگاه دلخواه است. این پروتکل، علاوه بر دستوراتی که WebDriver تعریف می کند، دستورات خاصی دارد که اغلب مختص دستگاه remote است که در حال خودکار شدن است. این پروتکل برای سناریوهای تست تلفن همراه، زمانی که می خواهید تست های مشابهی را برای برنامه های اندروید و iOS بنویسید و اجرا کنید، ایده آل است.
According to Appium documentation it was designed to meet mobile automation needs according to a philosophy outlined by the following four tenets:
- برای خودکارسازی آن، مجبور نیستید برنامه خود را دوباره کامپایل کنید یا به هیچ وجه آن را تغییر دهید.
- برای نوشتن و اجرای تستهای خود نباید به زبان یا فریمورک خاصی مجبور شوید.
- یک فریمورک اتوماسیون تلفن همراه نباید چرخ را دوباره اختراع کند وقتی صحبت از APIهای اتوماسیون می شود.
- یک فریمورک اتوماسیون موبایل باید از نظر روحی و عملی و همچنین از نظر شفاهی منبع باز باشد!
Chromium
پروتکل Chromium مجموعهای فوقالعاده از دستورات را در بالای پروتکل WebDriver ارائه میکند که فقط هنگام اجرای session خودکار از طریق Chromedriverپشتیبانی میشود.
Firefox
پروتکل Chromium مجموعهای فوقالعاده از دستورات را در بالای پروتکل WebDriver ارائه میکند که فقط هنگام اجرای session خودکار از طریق Chromedriverپشتیبانی میشود.
Sauce Labs
پروتکل Sauce Labs مجموعهای فوقالعاده از دستورات را در بالای پروتکل WebDriver ارائه میدهد که فقط در هنگام اجرای جلسه خودکار با استفاده از ابر Sauce Labs پشتیبانی میشود.
Selenium Standalone
پروتکل Selenium Standalone مجموعهای فوقالعاده از دستورات را در بالای پروتکل WebDriver ارائه میدهد که فقط در هنگام اجرای جلسه خودکار با استفاده از ابر Selenium Grid پشتیبانی میشود.
JSON Wire Protocol
JSON Wire Protocol نسخه پیشین پروتکل WebDriver است و امروز منسوخ شده است. در حالی که ممکن است برخی از دستورات هنوز در محیط های خاصی پشتیبانی شوند، استفاده از هیچ یک از دستورات آن توصیه نمی شود.
Mobile JSON Wire Protocol
Mobile JSON Wire Protocol مجموعه ای فوق العاده از دستورات تلفن همراه در بالای پروتکل JSON Wire است. با توجه به این که این پروتکل منسوخ شده است، پروتکل JSON Wire Mobile نیز منسوخ شده است. Appium ممکن است هنوز از برخی از دستورات خود پشتیبانی کند، اما استفاده از آنها توصیه نمی شود.