دستورات پروتکل
WebdriverIO یک چارچوب اتوماسیون است که بر پروتکلهای مختلف اتوماسیون برای کنترل یک عامل از راه دور متکی است، مثلاً برای مرورگر، دستگاه موبایل یا تلویزیون. بر اساس دستگاه راه دور، پروتکلهای مختلفی مورد استفاده قرار میگیرند. این دستورات با توجه به اطلاعات جلسه توسط سرور راه دور (مثلاً درایور مرورگر) به شیء Browser یا Element اختصاص داده میشوند.
در داخل، WebdriverIO از دستورات پروتکل برای تقریباً تمام تعاملات با عامل راه دور استفاده میکند. با این حال، دستورات اضافی اختصاص داده شده به شیء Browser یا Element استفاده از WebdriverIO را سادهتر میکند. به عنوان مثال، دریافت متن یک عنصر با استفاده از دستورات پروتکل به این شکل خواهد بود:
const searchInput = await browser.findElement('css selector', '#lst-ib')
await client.getElementText(searchInput['element-6066-11e4-a52e-4f735466cecf'])
با استفاده از دستورات راحت شیء Browser یا Element، این میتواند به این صورت کاهش یابد:
$('#lst-ib').getText()
بخشهای زیر هر پروتکل را به صورت جداگانه توضیح میدهند.
پروتکل WebDriver
پروتکل WebDriver یک استاندارد وب برای اتوماسیون مرورگر است. برخلاف برخی از ابزارهای E2E دیگر، این پروتکل تضمین میکند که اتوماسیون میتواند بر روی مرورگرهای واقعی که توسط کاربران شما استفاده میشود مانند Firefox، Safari و Chrome و مرورگرهای مبتنی بر Chromium مانند Edge انجام شود و نه فقط روی موتورهای مرورگر مانند WebKit، که بسیار متفاوت هستند.
مزیت استفاده از پروتکل WebDriver در مقابل پروتکلهای اشکالزدایی مانند Chrome DevTools این است که شما مجموعهای خاص از دستورات را دارید که به شما امکان میدهد به همان روش در تمام مرورگرها با مرورگر تعامل داشته باشید، که احتمال ناپایداری را کاهش میدهد. علاوه بر این، این پروتکل امکانات مقیاسپذیری عظیم را با استفاده از ارائهدهندگان ابری مانند Sauce Labs، BrowserStack و دیگران فراهم میکند.
پروتکل WebDriver Bidi
پروتکل WebDriver Bidi نسل دوم پروتکل است و در حال حاضر توسط اکثر سازندگان مرورگر در حال توسعه است. در مقایسه با پیشنیاز خود، این پروتکل از ارتباط دو طرفه (به همین دلیل "Bidi") بین چارچوب و دستگاه راه دور پشتیبانی میکند. همچنین امکانات اولیه اضافی برای دروننگری بهتر مرورگر معرفی میکند تا بتوان برنامههای وب مدرن را در مرورگر بهتر اتوماتیک کرد.
با توجه به اینکه این پروتکل در حال حاضر در دست کار است، در طول زمان ویژگیهای بیشتری اضافه خواهد شد و توسط مرورگر پشتیبانی خواهد شد. اگر از دستورات راحت WebdriverIO استفاده میکنید، چیزی برای شما تغییر نخواهد کرد. WebdriverIO به محض در دسترس بودن و پشتیبانی در مرورگر، از این قابلیتهای جدید پروتکل استفاده خواهد کرد.
Appium
پروژه Appium قابلیتهایی را برای اتوماسیون دستگاههای موبایل، دسکتاپ و انواع دیگر دستگاههای IoT فراهم میکند. در حالی که WebDriver بر مرورگر و وب تمرکز دارد، چشمانداز Appium استفاده از همان رویکرد اما برای هر دستگاه دلخواه است. علاوه بر دستوراتی که WebDriver تعریف میکند، دستورات ویژهای دارد که اغلب مختص دستگاه راه دوری است که در حال اتوماسیون است. برای سناریوهای تست موبایل، این ایدهآل است وقتی که میخواهید همان تستها را برای هر دو برنامه Android و iOS بنویسید و اجرا کنید.
طبق مستندات Appium، این برنامه برای برآوردن نیازهای اتوماسیون موبایل مطابق با فلسفهای طراحی شده است که با چهار اصل زیر بیان میشود:
- نباید مجبور باشید برنامه خود را مجدداً کامپایل کنید یا به هر نحوی آن را برای اتوماسیون تغییر دهید.
- نباید به یک زبان یا چارچوب خاص برای نوشتن و اجرای تستهای خود محدود شوید.
- یک چارچوب اتوماسیون موبایل نباید چرخ را در مورد APIهای اتوماسیون از نو اختراع کند.
- یک چارچوب اتوماسیون موبایل باید متنباز باشد، هم در روح و عمل و هم در نام!
Chromium
پروتکل Chromium مجموعهای از دستورات را علاوه بر پروتکل WebDriver ارائه میدهد که فقط هنگام اجرای جلسات خودکار از طریق Chromedriver یا Edgedriver پشتیبانی میشود.
Firefox
پروتکل Firefox مجموعهای از دستورات را علاوه بر پروتکل WebDriver ارائه میدهد که فقط هنگام اجرای جلسات خودکار از طریق Geckodriver پشتیبانی میشود.
Sauce Labs
پروتکل Sauce Labs مجموعهای از دستورات را علاوه بر پروتکل WebDriver ارائه میدهد که فقط هنگام اجرای جلسات خودکار با استفاده از ابر Sauce Labs پشتیبانی میشود.
Selenium Standalone
پروتکل Selenium Standalone مجموعهای از دستورات را علاوه بر پروتکل WebDriver ارائه میدهد که فقط هنگام اجرای جلسات خودکار با استفاده از Selenium Grid پشتیبانی میشود.
پروتکل JSON Wire
پروتکل JSON Wire Protocol پیشنیاز پروتکل WebDriver است و امروزه منسوخ شده است. اگرچه ممکن است برخی از دستورات هنوز در محیطهای خاص پشتیبانی شوند، استفاده از هیچ یک از دستورات آن توصیه نمیشود.
پروتکل Mobile JSON Wire
پروتکل Mobile JSON Wire Protocol یک مجموعه از دستورات موبایل علاوه بر پروتکل JSON Wire است. با توجه به اینکه این یکی منسوخ شده است، پروتکل Mobile JSON Wire نیز منسوخ شده است. Appium ممکن است هنوز از برخی از دستورات آن پشتیبانی کند، اما استفاده از آنها توصیه نمیشود.