協定指令
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 專案提供了自動化行動裝置、桌面和所有其他種類的物聯網裝置的功能。雖然 WebDriver 專注於瀏覽器和網路,但 Appium 的願景是針對任何任意裝置使用相同的方法。除了 WebDriver 定義的指令之外,它還具有通常特定於正在自動化的遠端裝置的特殊指令。對於行動測試情境,當您想要為 Android 和 iOS 應用程式編寫和執行相同的測試時,這是理想的選擇。
根據 Appium 文件,它的設計宗旨是根據以下四個原則滿足行動自動化的需求:
- 您不應該為了自動化您的應用程式而必須重新編譯或以任何方式修改它。
- 您不應該被鎖定在特定的語言或框架中來編寫和執行您的測試。
- 行動自動化框架在自動化 API 方面不應重新發明輪子。
- 行動自動化框架應該是開放原始碼的,無論是在精神上、實踐上還是名義上!
Chromium
Chromium 協定在 WebDriver 協定的基礎上提供了一組超集指令,僅在透過 Chromedriver 或 Edgedriver 執行自動化連線時才支援。
Firefox
Firefox 協定在 WebDriver 協定的基礎上提供了一組超集指令,僅在透過 Geckodriver 執行自動化連線時才支援。
Sauce Labs
Sauce Labs 協定在 WebDriver 協定的基礎上提供了一組超集指令,僅在使用 Sauce Labs 雲端執行自動化連線時才支援。
Selenium 獨立版
Selenium 獨立版協定在 WebDriver 協定的基礎上提供了一組超集指令,僅在使用 Selenium Grid 執行自動化連線時才支援。
JSON Wire 協定
JSON Wire 協定是 WebDriver 協定的前身,目前已過時。雖然某些指令可能在某些環境中仍然受支援,但不建議使用它的任何指令。
行動裝置 JSON Wire 協定
行動裝置 JSON Wire 協定是 JSON Wire 協定的基礎上的一組超集行動裝置指令。鑑於此協定已過時,行動裝置 JSON Wire 協定也已過時。Appium 可能仍然支援它的一些指令,但不建議使用它們。