npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

web-driverify

v1.1.3

Published

A passive web driver endpoint for real browsers.

Downloads

34

Readme

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 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() | 🕑 |

Navigation

| 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() | ✅ |

Document Handling

| 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() | 🕑 |

Screen Capture

| 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.

Input Sources

| 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 Contexts

| 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.

Cookies

| 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.

Elements

| 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 | | 🕑 |

Element Retrieval

| 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.

Element Interaction

| 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() | ✅ |

Element State

| 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() | 🕑 |

User Prompts

| 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) | 👎 |

Low-level Interactions

| 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.

Storages

| 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() | 🕑 |

Logs

| Command Name | API Endpoint | wdio API | Status | | --------------- | ---------------------------------------- | ------------- | ----------- | | Get Log | POST /session/:sessionId/log | .log() | 🕑 | | Get Log Types | GET /session/:sessionId/log/types | .logTypes() | 🕑 |

Application Cache

| Command Name | API Endpoint | wdio API | Status | | ------------------------------ | ---------------------------------------- | --------------------------- | ----------- | | Get Application Cache Status | GET /session/:sessionId/application_cache/status | .applicationCacheStatus() | 🕑 |