1.1.3 • Published 6 years ago

web-driverify v1.1.3

Weekly downloads
5
License
MIT
Repository
github
Last release
6 years ago

web-driverify

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.

Get Started

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.

Development

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

Differences with WebDriver Protocol

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.

Implementation Status

APIs are categorized as WebDriver W3C Candidate Recommandation.

Sessions

Command NameAPI Endpointwdio APIStatus
StatusGET /status.status()🕑
New SessionPOST /session.session()
Get Active SessionsGET /sessions.sessions()🕑
Get SessionGET /session/:sessionId.session(id)🕑
Delete SessionDELETE /session/:sessionId.session('delete')
Set TimeoutsPOST /session/:sessionId/timeouts.timeouts()🕑
Set Timeout for Async ScriptPOST /session/:sessionId/timeouts/async_script.timeoutsAsyncScript()
Set Timout for Implicit WaitPOST /session/:sessionId/timeouts/implicit_wait.timeoutsImplicitWait()🕑

Navigation

Command NameAPI Endpointwdio APIStatus
GoPOST /session/:sessionId/url.url()
Get Current URLGET /session/:sessionId/url.getUrl()
BackPOST /session/:sessionId/back.back()🕑
ForwardPOST /session/:sessionId/forward.forward()
RefreshPOST /session/:sessionId/refresh.refresh()
Get TitleGET /session/:sessionId/title.title()

Document Handling

Command NameAPI Endpointwdio APIStatus
Getting Page SourceGET /session/:sessionId/source.source()🕑
Execute ScriptPOST /session/:sessionId/execute.execute()
Excecute Async ScriptPOST /session/:sessionId/execute_async.executeAsync()🕑

Screen Capture

Command NameAPI Endpointwdio APIStatus
Take ScreenshotGET /session/:sessionId/screenshot.screenshot()

Notes:

  • Screenshots are taken by html2cavans, which may difference with real web page.

Input Sources

Command NameAPI Endpointwdio APIStatus
Get Available EnginesGET /session/:sessionId/ime/available_engines.imeAvailableEngines()👎
Get Active EngineGET /session/:sessionId/ime/active_engine.imeActiveEngine()👎
Is IME ActivatedGET /session/:sessionId/ime/activated.imeActivated()👎
Deactivate IMEPOST /session/:sessionId/ime/deactivate.imeDeactivate()👎
Activate IMEPOST /session/:sessionId/ime/activate.imeActivate()👎

Notes:

Due to Javascript Limitaions, no input sources APIs will support.

Command Contexts

Command NameAPI Endpointwdio APIStatus
Get Window HandleGET /session/:sessionId/window_handle.window()👎
Get Window HandlesGET /session/:sessionId/window_handles.windowHandles()👎
Switch To FramePOST /session/:sessionId/frame.frame()👎
Switch To Parent FramePOST /session/:sessionId/frame/parent.frameParent()👎
Switch To WindowPOST /session/:sessionId/window.window()👎
Close WindowDELETE /session/:sessionId/window.close()👎
Set Window SizePOST /session/:sessionId/window/:windowHandle/size.windowHandleSize()👎
Get Window SizeGET /session/:sessionId/window/:windowHandle/size.windowHandleSize()👎
Set Window PositionPOST /session/:sessionId/window/:windowHandle/position.windowHandlePosition()👎
Get Window PositionGET /session/:sessionId/window/:windowHandle/position.windowHandlePosition()👎
Maximize WindowPOST /session/:sessionId/window/:windowHandle/maximize.windowMaximize()👎

Notes:

  • Due to Javascript Limitaions, no window APIs will support.

Cookies

Command NameAPI Endpointwdio APIStatus
Get All CookiesGET /session/:sessionId/cookie.cookie()🕑
Add CookiePOST /session/:sessionId/cookie.setCookie()🕑
Delete CookieDELETE /session/:sessionId/cookie.deleteCookie()🕑
Delete All CookiesDELETE /session/:sessionId/cookie/:name.deleteCookie()🕑

Notes:

  • Http-only cookies will fetched from http proxy.

Elements

Command NameAPI Endpointwdio APIStatus
Get Active ElementPOST /session/:sessionId/element/active.elementActive()🕑
Is Elements SameGET /session/:sessionId/element/:id/equals/:other🕑

Element Retrieval

Command NameAPI Endpointwdio APIStatus
Find ElementPOST /session/:sessionId/element.element()
Find ElementsPOST /session/:sessionId/elements.elements()
Get Element By IdGET /session/:sessionId/element/:id👎
Find Element From ElementPOST /session/:sessionId/element/:id/element.$(foo).$(bar)
Find Elements From ElementPOST /session/:sessionId/element/:id/elements.$(foo).$$(bar)

Notes:

Get element by id is a reserved api.

Element Interaction

Command NameAPI Endpointwdio APIStatus
Element ClickPOST /session/:sessionId/element/:id/click.elementIdClick()
Element ClearPOST /session/:sessionId/element/:id/clear.elementIdClear()
Element Send KeysPOST /session/:sessionId/element/:id/value.elementIdValue()
Element SubmitPOST /session/:sessionId/element/:id/submit.submit()

Element State

Command NameAPI Endpointwdio APIStatus
Is Element SelectedGET /session/:sessionId/element/:id/selected.elementIdSelected()🕑
Get Element AttributeGET /session/:sessionId/element/:id/attribute/:name.elementIdAttribute()
Get Element CSS ValueGET /session/:sessionId/element/:id/css/:propertyName.elementIdCssProperty()
Get Element TextGET /session/:sessionId/element/:id/text.elementIdText()
Get Element Tag NameGET /session/:sessionId/element/:id/name.elementIdName()🕑
Get Element SizeGET /session/:sessionId/element/:id/size.elementIdSize()
Is Element EnabledGET /session/:sessionId/element/:id/enabled.elementIdEnabled()🕑
Is Element DisplayedGET /session/:sessionId/element/:id/displayed.elementIdDisplayed()
Get Element LocationGET /session/:sessionId/element/:id/location.elementIdLocation()
Get Element RectGET /session/:sessionId/element/:id/rect.elementIdRect()
Get Element Location In ViewGET /session/:sessionId/element/:id/location_in_view.elementIdLocationInView()🕑

User Prompts

Command NameAPI Endpointwdio APIStatus
Dismiss AlertPOST /session/:sessionId/dismiss_alert.alertDismiss()👎
Accept AlertPOST /session/:sessionId/accept_alert.alertAccept()👎
Get Alert TextGET /session/:sessionId/alert_text.alertText()🕑
Send Alert TextPOST /session/:sessionId/alert_text.alertText(text)👎

Low-level Interactions

Command NameAPI Endpointwdio APIStatus
Get OrientationGET /session/:sessionId/orientation.getOrientation()🕑
Set OrientationPOST /session/:sessionId/orientation.setOrientation()👎
Move the MousePOST /session/:sessionId/moveto.moveTo()🕑
Click the Mouse ButtonPOST /session/:sessionId/click.buttonPress()🕑
Click and Hold the Mouse ButtonPOST /session/:sessionId/buttondown.buttonDown()🕑
Releases the Mouse ButtonPOST /session/:sessionId/buttonup.buttonUp()🕑
Double-click the Mouse ButtonPOST /session/:sessionId/doubleclick.doDoubleClick()🕑
Tap the ScreenPOST /session/:sessionId/touch/click.touchClick()
Finger DownPOST /session/:sessionId/touch/down.touchDown()🕑
Finger UpPOST /session/:sessionId/touch/up.touchUp()🕑
Finger MovePOST session/:sessionId/touch/move.touchMove()🕑
Finger ScrollPOST session/:sessionId/touch/scroll.touchScroll()🕑
Double TapPOST session/:sessionId/touch/doubleclick🕑
Long TapPOST session/:sessionId/touch/longclick.touchLongClick()🕑
FlickPOST session/:sessionId/touch/flick.touchFlick()🕑
Get Geo LocationGET /session/:sessionId/location.getGeoLocation()🕑
Set Geo LocationPOST /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.

Storages

Command NameAPI Endpointwdio APIStatus
Get LocalstorageGET /session/:sessionId/local_storage.localStorage()🕑
Set LocalstoragePOST /session/:sessionId/local_storage.localStorage()🕑
Clear LocalstorageDELETE /session/:sessionId/local_storage.localStorage()🕑
Get Localstorage ItemGET /session/:sessionId/local_storage/key/:key.localStorage()🕑
Set Localstorage ItemDELETE /session/:sessionId/local_storage/key/:key.localStorage()🕑
Get Localstorage sizeGET /session/:sessionId/local_storage/size.localStorageSize()🕑
Get SessionstorageGET /session/:sessionId/session_storage.sessionStorage()🕑
Set SessionstoragePOST /session/:sessionId/session_storage.sessionStorage()🕑
Clear SessionstorageDELETE /session/:sessionId/session_storage.sessionStorage()🕑
Get Sessionstorage ItemGET /session/:sessionId/session_storage/key/:key.sessionStorage()🕑
Set Sessionstorage ItemDELETE /session/:sessionId/session_storage/key/:key.sessionStorage()🕑
Get Sessionstorage SizeGET /session/:sessionId/session_storage/size.sessionStorageSize()🕑

Logs

Command NameAPI Endpointwdio APIStatus
Get LogPOST /session/:sessionId/log.log()🕑
Get Log TypesGET /session/:sessionId/log/types.logTypes()🕑

Application Cache

Command NameAPI Endpointwdio APIStatus
Get Application Cache StatusGET /session/:sessionId/application_cache/status.applicationCacheStatus()🕑
1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

7 years ago

0.2.7

7 years ago

0.2.6

7 years ago

0.2.5

7 years ago

0.2.4

7 years ago

0.2.3

7 years ago

0.2.2

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago