This is a common webdriver for any browser to provide Web Driver interface. Especially useful for browsers that does NOT support Web Driver API.
Web-driverify supports most of the Web Driver Commands, and can work without browser-specific binaries.
Install
npm i -g web-driverify
Start Server
$ wd -h
Usage: wd [options] [configFile]
Options:
-V, --version output the version number
-p, --port [num] port number [8089]
--proxy-port [num] proxy port number [8088]
--stub-port [num] stub port number for debug use [8087]
--host [hostname] hostname for the server
-h, --help output usage information
configFile
defaults to web-driverify.yaml
in currrent work directory, here's an example.
Here's a boilerplate project: https://github.com/web-driverify/wdio-boilerplate
Set
DEBUG=wd:*
to enable debug output.wd-phantom
will attach a phantomjs (one of the brilliant headless browsers) instance automatically everytime NewSession requested.
Download
git clone https://github.com/web-driverify/web-driverify.git
Install
# fibers in wdio requires -std=gnu++0x, thus make sure gcc4.3+ installed.
cd web-driverify && npm install
Run test
# Run all test cases
npm test
# run unit/e2e test cases separately
# attach phantom.js
npm run debug:phantom
# run cases, in another shell
npm run test:unit
npm run test:e2e
Web-driverify is implemented in comformance to JSON Wire Protocol, the HTTP APIs exposed by web-driverify are just like Selenium 2, thus compliant with selenium-based test runners like Webdriverio.
Web-driverify cannot launch your browser by itself, you need set your browser's proxy to the Web-driverify server and open a session by visiting the given URL.
Due to limitaions of Javascript, we can't do the same things as selenium.
APIs are categorized as WebDriver W3C Candidate Recommandation.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Status | GET /status | .status() |
🕑 |
New Session | POST /session | .session() |
✅ |
Get Active Sessions | GET /sessions | .sessions() |
🕑 |
Get Session | GET /session/:sessionId | .session(id) |
🕑 |
Delete Session | DELETE /session/:sessionId | .session('delete') |
✅ |
Set Timeouts | POST /session/:sessionId/timeouts | .timeouts() |
🕑 |
Set Timeout for Async Script | POST /session/:sessionId/timeouts/async_script | .timeoutsAsyncScript() |
✅ |
Set Timout for Implicit Wait | POST /session/:sessionId/timeouts/implicit_wait | .timeoutsImplicitWait() |
🕑 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Go | POST /session/:sessionId/url | .url() |
✅ |
Get Current URL | GET /session/:sessionId/url | .getUrl() |
✅ |
Back | POST /session/:sessionId/back | .back() |
🕑 |
Forward | POST /session/:sessionId/forward | .forward() |
✅ |
Refresh | POST /session/:sessionId/refresh | .refresh() |
✅ |
Get Title | GET /session/:sessionId/title | .title() |
✅ |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Getting Page Source | GET /session/:sessionId/source | .source() |
🕑 |
Execute Script | POST /session/:sessionId/execute | .execute() |
✅ |
Excecute Async Script | POST /session/:sessionId/execute_async | .executeAsync() |
🕑 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Take Screenshot | GET /session/:sessionId/screenshot | .screenshot() |
✅ |
Notes:
- Screenshots are taken by html2cavans, which may difference with real web page.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Available Engines | GET /session/:sessionId/ime/available_engines | .imeAvailableEngines() |
👎 |
Get Active Engine | GET /session/:sessionId/ime/active_engine | .imeActiveEngine() |
👎 |
Is IME Activated | GET /session/:sessionId/ime/activated | .imeActivated() |
👎 |
Deactivate IME | POST /session/:sessionId/ime/deactivate | .imeDeactivate() |
👎 |
Activate IME | POST /session/:sessionId/ime/activate | .imeActivate() |
👎 |
Notes:
Due to Javascript Limitaions, no input sources APIs will support.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Window Handle | GET /session/:sessionId/window_handle | .window() |
👎 |
Get Window Handles | GET /session/:sessionId/window_handles | .windowHandles() |
👎 |
Switch To Frame | POST /session/:sessionId/frame | .frame() |
👎 |
Switch To Parent Frame | POST /session/:sessionId/frame/parent | .frameParent() |
👎 |
Switch To Window | POST /session/:sessionId/window | .window() |
👎 |
Close Window | DELETE /session/:sessionId/window | .close() |
👎 |
Set Window Size | POST /session/:sessionId/window/:windowHandle/size | .windowHandleSize() |
👎 |
Get Window Size | GET /session/:sessionId/window/:windowHandle/size | .windowHandleSize() |
👎 |
Set Window Position | POST /session/:sessionId/window/:windowHandle/position | .windowHandlePosition() |
👎 |
Get Window Position | GET /session/:sessionId/window/:windowHandle/position | .windowHandlePosition() |
👎 |
Maximize Window | POST /session/:sessionId/window/:windowHandle/maximize | .windowMaximize() |
👎 |
Notes:
- Due to Javascript Limitaions, no window APIs will support.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get All Cookies | GET /session/:sessionId/cookie | .cookie() |
🕑 |
Add Cookie | POST /session/:sessionId/cookie | .setCookie() |
🕑 |
Delete Cookie | DELETE /session/:sessionId/cookie | .deleteCookie() |
🕑 |
Delete All Cookies | DELETE /session/:sessionId/cookie/:name | .deleteCookie() |
🕑 |
Notes:
- Http-only cookies will fetched from http proxy.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Active Element | POST /session/:sessionId/element/active | .elementActive() |
🕑 |
Is Elements Same | GET /session/:sessionId/element/:id/equals/:other | 🕑 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Find Element | POST /session/:sessionId/element | .element() |
✅ |
Find Elements | POST /session/:sessionId/elements | .elements() |
✅ |
Get Element By Id | GET /session/:sessionId/element/:id | 👎 | |
Find Element From Element | POST /session/:sessionId/element/:id/element | .$(foo).$(bar) |
✅ |
Find Elements From Element | POST /session/:sessionId/element/:id/elements | .$(foo).$$(bar) |
✅ |
Notes:
Get element by id is a reserved api.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Element Click | POST /session/:sessionId/element/:id/click | .elementIdClick() |
✅ |
Element Clear | POST /session/:sessionId/element/:id/clear | .elementIdClear() |
✅ |
Element Send Keys | POST /session/:sessionId/element/:id/value | .elementIdValue() |
✅ |
Element Submit | POST /session/:sessionId/element/:id/submit | .submit() |
✅ |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Is Element Selected | GET /session/:sessionId/element/:id/selected | .elementIdSelected() |
🕑 |
Get Element Attribute | GET /session/:sessionId/element/:id/attribute/:name | .elementIdAttribute() |
✅ |
Get Element CSS Value | GET /session/:sessionId/element/:id/css/:propertyName | .elementIdCssProperty() |
✅ |
Get Element Text | GET /session/:sessionId/element/:id/text | .elementIdText() |
✅ |
Get Element Tag Name | GET /session/:sessionId/element/:id/name | .elementIdName() |
🕑 |
Get Element Size | GET /session/:sessionId/element/:id/size | .elementIdSize() |
✅ |
Is Element Enabled | GET /session/:sessionId/element/:id/enabled | .elementIdEnabled() |
🕑 |
Is Element Displayed | GET /session/:sessionId/element/:id/displayed | .elementIdDisplayed() |
✅ |
Get Element Location | GET /session/:sessionId/element/:id/location | .elementIdLocation() |
✅ |
Get Element Rect | GET /session/:sessionId/element/:id/rect | .elementIdRect() |
✅ |
Get Element Location In View | GET /session/:sessionId/element/:id/location_in_view | .elementIdLocationInView() |
🕑 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Dismiss Alert | POST /session/:sessionId/dismiss_alert | .alertDismiss() |
👎 |
Accept Alert | POST /session/:sessionId/accept_alert | .alertAccept() |
👎 |
Get Alert Text | GET /session/:sessionId/alert_text | .alertText() |
🕑 |
Send Alert Text | POST /session/:sessionId/alert_text | .alertText(text) |
👎 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Orientation | GET /session/:sessionId/orientation | .getOrientation() |
🕑 |
Set Orientation | POST /session/:sessionId/orientation | .setOrientation() |
👎 |
Move the Mouse | POST /session/:sessionId/moveto | .moveTo() |
🕑 |
Click the Mouse Button | POST /session/:sessionId/click | .buttonPress() |
🕑 |
Click and Hold the Mouse Button | POST /session/:sessionId/buttondown | .buttonDown() |
🕑 |
Releases the Mouse Button | POST /session/:sessionId/buttonup | .buttonUp() |
🕑 |
Double-click the Mouse Button | POST /session/:sessionId/doubleclick | .doDoubleClick() |
🕑 |
Tap the Screen | POST /session/:sessionId/touch/click | .touchClick() |
✅ |
Finger Down | POST /session/:sessionId/touch/down | .touchDown() |
🕑 |
Finger Up | POST /session/:sessionId/touch/up | .touchUp() |
🕑 |
Finger Move | POST session/:sessionId/touch/move | .touchMove() |
🕑 |
Finger Scroll | POST session/:sessionId/touch/scroll | .touchScroll() |
🕑 |
Double Tap | POST session/:sessionId/touch/doubleclick | 🕑 | |
Long Tap | POST session/:sessionId/touch/longclick | .touchLongClick() |
🕑 |
Flick | POST session/:sessionId/touch/flick | .touchFlick() |
🕑 |
Get Geo Location | GET /session/:sessionId/location | .getGeoLocation() |
🕑 |
Set Geo Location | POST /session/:sessionId/location | .setGeoLocation() |
👎 |
Notes:
- Touch and cliks will simulated via Javascript and may not work.
- Set geo locations are not possible when you are using real devices.
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Localstorage | GET /session/:sessionId/local_storage | .localStorage() |
🕑 |
Set Localstorage | POST /session/:sessionId/local_storage | .localStorage() |
🕑 |
Clear Localstorage | DELETE /session/:sessionId/local_storage | .localStorage() |
🕑 |
Get Localstorage Item | GET /session/:sessionId/local_storage/key/:key | .localStorage() |
🕑 |
Set Localstorage Item | DELETE /session/:sessionId/local_storage/key/:key | .localStorage() |
🕑 |
Get Localstorage size | GET /session/:sessionId/local_storage/size | .localStorageSize() |
🕑 |
Get Sessionstorage | GET /session/:sessionId/session_storage | .sessionStorage() |
🕑 |
Set Sessionstorage | POST /session/:sessionId/session_storage | .sessionStorage() |
🕑 |
Clear Sessionstorage | DELETE /session/:sessionId/session_storage | .sessionStorage() |
🕑 |
Get Sessionstorage Item | GET /session/:sessionId/session_storage/key/:key | .sessionStorage() |
🕑 |
Set Sessionstorage Item | DELETE /session/:sessionId/session_storage/key/:key | .sessionStorage() |
🕑 |
Get Sessionstorage Size | GET /session/:sessionId/session_storage/size | .sessionStorageSize() |
🕑 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Log | POST /session/:sessionId/log | .log() |
🕑 |
Get Log Types | GET /session/:sessionId/log/types | .logTypes() |
🕑 |
Command Name | API Endpoint | wdio API | Status |
---|---|---|---|
Get Application Cache Status | GET /session/:sessionId/application_cache/status | .applicationCacheStatus() |
🕑 |