功能
功能是對遠端介面的定義。它可以幫助 WebdriverIO 理解您希望在哪個瀏覽器或行動環境中執行測試。當您在本地開發測試時,功能並不那麼重要,因為您大部分時間都在一個遠端介面上執行它,但在 CI/CD 中運行大量整合測試時,功能就變得更加重要。
功能物件的格式由 WebDriver 規範明確定義。如果使用者定義的功能不符合該規範,WebdriverIO 測試執行器將會提前失敗。
自訂功能
雖然固定定義的功能數量非常少,但每個人都可以提供和接受特定於自動化驅動程式或遠端介面的自訂功能
瀏覽器特定功能擴充
goog:chromeOptions
:Chromedriver 擴充功能,僅適用於在 Chrome 中測試moz:firefoxOptions
:Geckodriver 擴充功能,僅適用於在 Firefox 中測試ms:edgeOptions
:當使用 EdgeDriver 測試 Chromium Edge 時,用於指定環境的 EdgeOptions
雲端供應商功能擴充
sauce:options
:Sauce Labsbstack:options
:BrowserStacktb:options
:TestingBot- 還有更多...
自動化引擎功能擴充
WebdriverIO 功能管理瀏覽器驅動程式選項
WebdriverIO 會為您管理安裝和執行瀏覽器驅動程式。WebdriverIO 使用自訂功能,允許您將參數傳遞到驅動程式。
wdio:chromedriverOptions
啟動 Chromedriver 時傳遞到其中的特定選項。
wdio:geckodriverOptions
啟動 Geckodriver 時傳遞到其中的特定選項。
wdio:edgedriverOptions
啟動 Edgedriver 時傳遞到其中的特定選項。
wdio:safaridriverOptions
啟動 Safari 時傳遞到其中的特定選項。
wdio:maxInstances
特定瀏覽器/功能的最大平行執行工作執行個體總數。優先於 maxInstances 和 maxInstancesPerCapability。
類型:number
wdio:specs
定義該瀏覽器/功能的測試執行規格。與一般的 specs
設定選項相同,但特定於瀏覽器/功能。優先於 specs
。
類型:(String | String[])[]
wdio:exclude
從該瀏覽器/功能的測試執行中排除規格。與一般的 exclude
設定選項相同,但特定於瀏覽器/功能。優先於 exclude
。
類型:String[]
wdio:enforceWebDriverClassic
預設情況下,WebdriverIO 會嘗試建立 WebDriver Bidi 會話。如果您不希望這樣,可以設定此旗標來停用此行為。
類型:boolean
常見驅動程式選項
雖然所有驅動程式都提供不同的組態參數,但 WebdriverIO 理解並使用一些常見的參數來設定您的驅動程式或瀏覽器
cacheDir
快取目錄根目錄的路徑。此目錄用於儲存嘗試啟動會話時下載的所有驅動程式。
類型:string
預設值:process.env.WEBDRIVER_CACHE_DIR || os.tmpdir()
binary
自訂驅動程式二進位檔的路徑。如果設定,WebdriverIO 將不會嘗試下載驅動程式,而是會使用此路徑提供的驅動程式。請確保驅動程式與您使用的瀏覽器相容。
您可以透過 CHROMEDRIVER_PATH
、GECKODRIVER_PATH
或 EDGEDRIVER_PATH
環境變數提供此路徑。
類型:string
如果設定了驅動程式 binary
,WebdriverIO 將不會嘗試下載驅動程式,而是會使用此路徑提供的驅動程式。請確保驅動程式與您使用的瀏覽器相容。
瀏覽器特定驅動程式選項
為了將選項傳遞到驅動程式,您可以使用以下自訂功能
- Chrome 或 Chromium:
wdio:chromedriverOptions
- Firefox:
wdio:geckodriverOptions
- Microsoft Egde:
wdio:edgedriverOptions
- Safari:
wdio:safaridriverOptions
- wdio:chromedriverOptions
- wdio:geckodriverOptions
- wdio:edgedriverOptions
- wdio:safaridriverOptions
adbPort
ADB 驅動程式應該執行的連接埠。
範例:9515
類型:number
urlBase
命令的基本 URL 路徑前置詞,例如 wd/url
。
範例:/
類型:string
logPath
將伺服器記錄寫入檔案,而不是 stderr,將記錄層級提高到 INFO
類型:string
logLevel
設定記錄層級。可能的選項 ALL
、DEBUG
、INFO
、WARNING
、SEVERE
、OFF
。
類型:string
verbose
詳細記錄 (相當於 --log-level=ALL
)
類型:boolean
silent
不記錄任何內容 (相當於 --log-level=OFF
)
類型:boolean
appendLog
附加記錄檔而不是重寫。
類型:boolean
replayable
詳細記錄且不截斷長字串,以便可以重播記錄 (實驗性)。
類型:boolean
readableTimestamp
將可讀取的時間戳記新增至記錄。
類型:boolean
enableChromeLogs
顯示瀏覽器的記錄 (覆寫其他記錄選項)。
類型:boolean
bidiMapperPath
自訂 bidi 對應器路徑。
類型:string
allowedIps
允許連線到 EdgeDriver 的遠端 IP 位址的逗號分隔允許清單。
類型:string[]
預設值:['']
allowedOrigins
允許連線到 EdgeDriver 的要求來源的逗號分隔允許清單。使用 *
來允許任何主機來源是很危險的!
類型:string[]
預設值:['*']
請參閱官方驅動程式套件中的所有 Geckodriver 選項。
請參閱官方驅動程式套件中的所有 Edgedriver 選項。
請參閱官方驅動程式套件中的所有 Safaridriver 選項。
特定使用案例的特殊功能
這是一個範例列表,展示為了實現特定使用案例需要應用哪些功能。
以無頭模式執行瀏覽器
以無頭模式執行瀏覽器表示執行一個沒有視窗或 UI 的瀏覽器實例。這通常用於沒有使用顯示器的 CI/CD 環境中。要以無頭模式執行瀏覽器,請應用以下功能:
- Chrome
- Firefox
- Microsoft Edge
- Safari
{
browserName: 'chrome', // or 'chromium'
'goog:chromeOptions': {
args: ['headless', 'disable-gpu']
}
}
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-headless']
}
browserName: 'msedge',
'ms:edgeOptions': {
args: ['--headless']
}
Safari 似乎不支援以無頭模式執行。
自動化不同的瀏覽器通道
如果您想測試尚未發佈為穩定版本的瀏覽器版本,例如 Chrome Canary,您可以透過設定功能並指向您想要啟動的瀏覽器來實現,例如:
- Chrome
- Firefox
- Microsoft Edge
- Safari
在 Chrome 上進行測試時,WebdriverIO 將根據定義的 browserVersion
自動為您下載所需的瀏覽器版本和驅動程式,例如:
{
browserName: 'chrome', // or 'chromium'
browserVersion: '116' // or '116.0.5845.96', 'stable', 'latest', 'dev', 'canary', 'beta'
}
如果您想測試手動下載的瀏覽器,您可以透過以下方式提供瀏覽器的二進位路徑:
{
browserName: 'chrome', // or 'chromium'
'goog:chromeOptions': {
binary: '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary'
}
}
此外,如果您想使用手動下載的驅動程式,您可以透過以下方式提供驅動程式的二進位路徑:
{
browserName: 'chrome', // or 'chromium'
'wdio:chromedriverOptions': {
binary: '/path/to/chromdriver'
}
}
在 Firefox 上進行測試時,WebdriverIO 將根據定義的 browserVersion
自動為您下載所需的瀏覽器版本和驅動程式,例如:
{
browserName: 'firefox',
browserVersion: '119.0a1' // or 'latest'
}
如果您想測試手動下載的版本,您可以透過以下方式提供瀏覽器的二進位路徑:
{
browserName: 'firefox',
'moz:firefoxOptions': {
binary: '/Applications/Firefox\ Nightly.app/Contents/MacOS/firefox'
}
}
此外,如果您想使用手動下載的驅動程式,您可以透過以下方式提供驅動程式的二進位路徑:
{
browserName: 'firefox',
'wdio:geckodriverOptions': {
binary: '/path/to/geckodriver'
}
}
在 Microsoft Edge 上進行測試時,請確保您的電腦上已安裝所需的瀏覽器版本。您可以透過以下方式將 WebdriverIO 指向要執行的瀏覽器:
{
browserName: 'msedge',
'ms:edgeOptions': {
binary: '/Applications/Microsoft\ Edge\ Canary.app/Contents/MacOS/Microsoft\ Edge\ Canary'
}
}
WebdriverIO 將根據定義的 browserVersion
自動為您下載所需的驅動程式版本,例如:
{
browserName: 'msedge',
browserVersion: '109' // or '109.0.1467.0', 'stable', 'dev', 'canary', 'beta'
}
此外,如果您想使用手動下載的驅動程式,您可以透過以下方式提供驅動程式的二進位路徑:
{
browserName: 'msedge',
'wdio:edgedriverOptions': {
binary: '/path/to/msedgedriver'
}
}
在 Safari 上進行測試時,請確保您的電腦上已安裝Safari Technology Preview。您可以透過以下方式將 WebdriverIO 指向該版本:
{
browserName: 'safari technology preview'
}
擴展自訂功能
如果您想定義自己的功能集,以便例如儲存任意數據以在該特定功能的測試中使用,您可以透過例如設定以下內容來實現:
export const config = {
// ...
capabilities: [{
browserName: 'chrome',
'custom:caps': {
// custom configurations
}
}]
}
建議您在功能命名時遵循W3C 協定,該協定需要一個 :
(冒號) 字元,表示特定於實作的命名空間。在您的測試中,您可以透過以下方式存取您的自訂功能,例如:
browser.capabilities['custom:caps']
為了確保型別安全,您可以透過以下方式擴展 WebdriverIO 的功能介面:
declare global {
namespace WebdriverIO {
interface Capabilities {
'custom:caps': {
// ...
}
}
}
}