Các Framework
WebdriverIO Runner có hỗ trợ sẵn cho Mocha, Jasmine, và Cucumber.js. Bạn cũng có thể tích hợp nó với các framework nguồn mở bên thứ ba, như Serenity/JS.
Để tích hợp WebdriverIO với một test framework, bạn cần một gói adapter có sẵn trên NPM. Lưu ý rằng gói adapter phải được cài đặt ở cùng vị trí nơi WebdriverIO được cài đặt. Vì vậy, nếu bạn đã cài đặt WebdriverIO một cách toàn cục, hãy đảm bảo cài đặt gói adapter cũng một cách toàn cục.
Tích hợp WebdriverIO với một test framework cho phép bạn truy cập vào phiên WebDriver thông qua biến toàn cục browser
trong các file spec hoặc định nghĩa bước (step definitions) của bạn.
Lưu ý rằng WebdriverIO cũng sẽ lo việc khởi tạo và kết thúc phiên Selenium, vì vậy bạn không cần phải tự làm điều đó.
Sử dụng Mocha
Đầu tiên, cài đặt gói adapter từ NPM:
- npm
- Yarn
- pnpm
- Bun
npm install @wdio/mocha-framework --save-dev
yarn add @wdio/mocha-framework --dev
pnpm add @wdio/mocha-framework --save-dev
bun add @wdio/mocha-framework --dev
Mặc định, WebdriverIO cung cấp một thư viện kiểm tra được tích hợp sẵn mà bạn có thể bắt đầu sử dụng ngay lập tức:
describe('my awesome website', () => {
it('should do some assertions', async () => {
await browser.url('https://webdriver.io')
await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO')
})
})
WebdriverIO hỗ trợ các giao diện BDD (mặc định), TDD, và QUnit interfaces của Mocha.
Nếu bạn muốn viết các thông số kỹ thuật của mình theo kiểu TDD, hãy đặt thuộc tính ui trong cấu hình mochaOpts của bạn thành tdd. Bây giờ các file kiểm tra của bạn nên được viết như sau:
suite('my awesome website', () => {
test('should do some assertions', async () => {
await browser.url('https://webdriver.io')
await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO')
})
})
Nếu bạn muốn xác định các cài đặt khác dành riêng cho Mocha, bạn có thể làm điều đó bằng khóa mochaOpts trong tệp cấu hình của bạn. Danh sách tất cả các tùy chọn có thể được tìm thấy trên trang web dự án Mocha.
Lưu ý: WebdriverIO không hỗ trợ việc sử dụng đã bị loại bỏ của các hàm callback done trong Mocha:
it('should test something', (done) => {
done() // throws "done is not a function"
})
Tùy chọn Mocha
Các tùy chọn sau có thể được áp dụng trong tệp wdio.conf.js của bạn để cấu hình môi trường Mocha của bạn. Lưu ý: không phải tất c ả các tùy chọn đều được hỗ trợ, ví dụ: áp dụng tùy chọn parallel sẽ gây ra lỗi vì WDIO testrunner có cách riêng để chạy các bài kiểm tra song song. Bạn có thể truyền các tùy chọn framework này dưới dạng đối số, ví dụ:
wdio run wdio.conf.ts --mochaOpts.grep "my test" --mochaOpts.bail --no-mochaOpts.checkLeaks
Điều này sẽ truyền các tùy chọn Mocha sau:
{
grep: ['my-test'],
bail: true
checkLeacks: false
}
Các tùy chọn Mocha sau được hỗ trợ:
require
Tùy chọn require rất hữu ích khi bạn muốn thêm hoặc mở rộng một số chức năng cơ bản (tùy chọn framework của WebdriverIO).
Type: string|string[]
Default: []
compilers
Sử dụng (các) module đã cho để biên dịch các tệp. Các trình biên dịch sẽ được bao gồm trước khi yêu cầu (tùy chọn framework của WebdriverIO).
Type: string[]
Default: []
allowUncaught
Truyền các lỗi không bắt được.
Type: boolean
Default: false
bail
Dừng sau khi bài kiểm tra đầu tiên thất bại.
Type: boolean
Default: false
checkLeaks
Kiểm tra rò rỉ biến toàn cục.
Type: boolean
Default: false
delay
Trì hoãn thực thi bộ trình test gốc.
Type: boolean
Default: false
fgrep
Lọc kiểm tra theo chuỗi đã cho.
Type: string
Default: null
forbidOnly
Các bài kiểm tra chỉ được đánh dấu làm thất bại bộ test.
Type: boolean
Default: false
forbidPending
Các bài kiểm tra đang chờ xử lý làm thất bại bộ test.
Type: boolean
Default: false
fullTrace
Theo dõi đầy đủ ngăn xếp khi thất bại.
Type: boolean
Default: false
global
Biến dự kiến trong phạm vi toàn cục.
Type: string[]
Default: []
grep
Lọc kiểm tra bằng biểu thức chính quy đã cho.
Type: RegExp|string
Default: null
invert
Đảo ngược kết quả lọc kiểm tra.
Type: boolean
Default: false
retries
Số lần thử lại các bài kiểm tra thất bại.
Type: number
Default: 0
timeout
Giá trị ngưỡng thời gian chờ (tính bằng ms).
Type: number
Default: 30000
Sử dụng Jasmine
Đầu tiên, cài đặt gói adapter từ NPM:
- npm
- Yarn
- pnpm
- Bun
npm install @wdio/jasmine-framework --save-dev
yarn add @wdio/jasmine-framework --dev
pnpm add @wdio/jasmine-framework --save-dev
bun add @wdio/jasmine-framework --dev
Sau đó, bạn có thể cấu hình môi trường Jasmine của mình bằng cách đặt thuộc tính jasmineOpts trong cấu hình của bạn. Danh sách tất cả các tùy chọn có thể được tìm thấy trên trang web dự án Jasmine.
Tùy chọn Jasmine
Các tùy chọn sau có thể được áp dụng trong tệp wdio.conf.js của bạn để cấu hình môi trường Jasmine của bạn bằng cách sử dụng thuộc tính jasmineOpts. Để biết thêm thông tin về các tùy chọn cấu hình này, hãy xem tài liệu Jasmine. Bạn có thể truyền các tùy chọn framework này dưới dạng đối số, ví dụ:
wdio run wdio.conf.ts --jasmineOpts.grep "my test" --jasmineOpts.failSpecWithNoExpectations --no-jasmineOpts.random
Điều này sẽ truyền các tùy chọn Mocha sau:
{
grep: ['my-test'],
bail: true
checkLeacks: false
}
Các tùy chọn Jasmine sau được hỗ trợ:
defaultTimeoutInterval
Khoảng thời gian mặc định cho các hoạt động của Jasmine.
Type: number
Default: 60000
helpers
Mảng các đường dẫn tệp (và globs) tương đối với spec_dir để bao gồm trước các đặc tả jasmine.
Type: string[]
Default: []
requires
Tùy chọn requires rất hữu ích khi bạn muốn thêm hoặc mở rộng một số chức năng cơ bản.
Type: string[]
Default: []
random
Có hay không ngẫu nhiên hóa thứ tự thực hiện đặc tả.
Type: boolean
Default: true
seed
Hạt giống để sử dụng làm cơ sở cho sự ngẫu nhiên. Null khiến hạt giống được xác định ngẫu nhiên khi bắt đầu thực thi.
Type: Function
Default: null
failSpecWithNoExpectations
Có hay không làm cho đặc tả thất bại nếu nó chạy không có sự mong đợi. Theo mặc định, một đặc tả không chạy sự mong đợi nào được báo cáo là đã vượt qua. Đặt giá trị này thành true sẽ báo cáo đặc tả đó là thất bại.
Type: boolean
Default: false
oneFailurePerSpec
Có hay không để các đặc tả chỉ có một lỗi mong đợi.
Type: boolean
Default: false
specFilter
Hàm để sử dụng để lọc các đặc tả.
Type: Function
Default: (spec) => true
grep
Chỉ chạy các kiểm tra phù hợp với chuỗi hoặc biểu thức chính quy này. (Chỉ áp dụng nếu không có hàm specFilter tùy chỉnh nào được đặt)
Type: string|Regexp
Default: null
invertGrep
Nếu là true, nó đảo ngược các kiểm tra khớp và chỉ chạy các kiểm tra không khớp với biểu thức được sử dụng trong grep. (Chỉ áp dụng nếu không có hàm specFilter tùy chỉnh nào được đặt)
Type: boolean
Default: false
Sử dụng Cucumber
Đầu tiên, cài đặt gói adapter từ NPM:
- npm
- Yarn
- pnpm
- Bun
npm install @wdio/cucumber-framework --save-dev
yarn add @wdio/cucumber-framework --dev
pnpm add @wdio/cucumber-framework --save-dev
bun add @wdio/cucumber-framework --dev
Nếu bạn muốn sử dụng Cucumber, hãy đặt thuộc tính framework thành cucumber bằng cách thêm framework: 'cucumber' vào tệp cấu hình.
Các tùy chọn cho Cucumber có thể được đưa ra trong tệp cấu hình với cucumberOpts. Kiểm tra toàn bộ danh sách các tùy chọn tại đây.
Để nhanh chóng khởi động với Cucumber, hãy xem dự án cucumber-boilerplate của chúng tôi, có sẵn tất cả các định nghĩa bước mà bạn cần để bắt đầu, và bạn sẽ viết các tệp tính năng ngay lập tức.
Tùy chọn Cucumber
Các tùy chọn sau có thể được áp dụng trong tệp wdio.conf.js của bạn để cấu hình môi trường Cucumber của bạn bằng cách sử dụng thuộc tính cucumberOpts:
Các cucumberOpts, chẳng hạn như tags tùy chỉnh để lọc các bài kiểm tra, có thể được chỉ định thông qua dòng lệnh. Điều này được thực hiện bằng cách sử dụng định dạng cucumberOpts.{optionName}="value".
Ví dụ, nếu bạn chỉ muốn chạy các bài kiểm tra được gắn thẻ @smoke, bạn có thể sử dụng lệnh sau:
# Khi bạn chỉ muốn chạy các bài kiểm tra có thẻ "@smoke"
npx wdio run ./wdio.conf.js --cucumberOpts.tags="@smoke"
npx wdio run ./wdio.conf.js --cucumberOpts.name="some scenario name" --cucumberOpts.failFast
Lệnh này đặt tùy chọn tags trong cucumberOpts thành @smoke, đảm bảo rằng chỉ các bài kiểm tra có thẻ này được thực thi.
backtrace
Hiển thị đường dẫn lùi đầy đủ cho các lỗi.
Type: Boolean
Default: true
requireModule
Yêu cầu các mô-đun trước khi yêu cầu bất kỳ tệp hỗ trợ nào.
Type: string[]
Default: []
Example:
cucumberOpts: {
requireModule: ['@babel/register']
// or
requireModule: [
[
'@babel/register',
{
rootMode: 'upward',
ignore: ['node_modules']
}
]
]
}
failFast
Hủy bỏ chạy khi có lỗi đầu tiên.
Type: boolean
Default: false
name
Chỉ thực hiện các kịch bản có tên phù hợp với biểu thức (có thể lặp lại).
Type: RegExp[]
Default: []
require
Yêu cầu các tệp chứa các định nghĩa bước của bạn trước khi thực hiện các tính năng. Bạn cũng có thể chỉ định một glob cho các định nghĩa bước của bạn.
Type: string[]
Default: []
Example:
cucumberOpts: {
require: [path.join(__dirname, 'step-definitions', 'my-steps.js')]
}
import
Đường dẫn đến nơi mã hỗ trợ của bạn, cho ESM.
Type: String[]
Default: []
Example:
cucumberOpts: {
import: [path.join(__dirname, 'step-definitions', 'my-steps.js')]
}
strict
Thất bại nếu có bất kỳ bước nào không xác định hoặc đang chờ xử lý.
Type: boolean
Default: false
tags
Chỉ thực hiện các tính năng hoặc kịch bản có thẻ khớp với biểu thức. Vui lòng xem tài liệu Cucumber để biết thêm chi tiết.
Type: String
Default: ``
timeout
Thời gian chờ tính bằng mili giây cho các định nghĩa bước.
Type: Number
Default: 30000
retry
Chỉ định số lần thử lại các trường hợp kiểm tra thất bại.
Type: Number
Default: 0
retryTagFilter
Chỉ thử lại các tính năng hoặc kịch bản có thẻ khớp với biểu thức (có thể lặp lại). Tùy chọn này yêu cầu phải chỉ định '--retry'.
Type: RegExp
language
Ngôn ngữ mặc định cho các tệp tính năng của bạn
Type: String
Default: en
order
Chạy các bài kiểm tra theo thứ tự xác định / ngẫu nhiên
Type: String
Default: defined
format
Tên và đường dẫn tệp đầu ra của trình định dạng để sử dụng. WebdriverIO chủ yếu chỉ hỗ trợ Formatters có thể ghi đầu ra vào một tệp.
Type: string[]
formatOptions
Các tùy chọn được cung cấp cho các trình định dạng
Type: object
tagsInTitle
Thêm thẻ cucumber vào tên tính năng hoặc kịch bản
Type: Boolean
Default: false
Xin lưu ý rằng đây là một tùy chọn cụ thể của @wdio/cucumber-framework và không được cucumber-js nhận dạng
ignoreUndefinedDefinitions
Coi các định nghĩa không xác định là cảnh báo.
Type: Boolean
Default: false
Xin lưu ý rằng đây là một tùy chọn cụ thể của @wdio/cucumber-framework và không được cucumber-js nhận dạng
failAmbiguousDefinitions
Coi các định nghĩa không rõ ràng là lỗi.
Type: Boolean
Default: false
Xin lưu ý rằng đây là một tùy chọn cụ thể của @wdio/cucumber-framework và không được cucumber-js nhận dạng
tagExpression
Chỉ thực thi các tính năng hoặc kịch bản có thẻ khớp với biểu thức. Vui lòng xem tài liệu Cucumber để biết thêm chi tiết.
Type: String
Default: ``
Xin lưu ý rằng tùy chọn này sẽ bị loại bỏ trong tương lai. Sử dụng thuộc tính cấu hình tags thay thế
profile
Chỉ định hồ sơ để sử dụng.
Type: string[]
Default: []
Lưu ý rằng chỉ có các giá trị cụ thể (worldParameters, name, retryTagFilter) được hỗ trợ trong các profile, vì cucumberOpts có ưu tiên cao hơn. Ngoài ra, khi sử dụng profile, hãy đảm bảo rằng các giá trị đã đề cập không được khai báo trong cucumberOpts.