Bug 1368265 - Provide a webdriver README. r?automatedtester draft
authorAndreas Tolfsen <ato@sny.no>
Sun, 03 Sep 2017 17:15:03 +0100
changeset 658617 52bac1184385bb9540e8e3eb18d6d1a9285b57ec
parent 658616 6935643547daea08791e4dbb8c4771fce6bccde0
child 658618 08dd126a9fa03c96574a191a31e26d1f079c995c
push id77827
push userbmo:ato@sny.no
push dateMon, 04 Sep 2017 12:56:18 +0000
reviewersautomatedtester
bugs1368265
milestone57.0a1
Bug 1368265 - Provide a webdriver README. r?automatedtester Documentation is the hallmark of a good software library and this isn't great, but it is a step in the right direction. MozReview-Commit-ID: IHDwp2pjXom
testing/webdriver/README.md
--- a/testing/webdriver/README.md
+++ b/testing/webdriver/README.md
@@ -1,6 +1,101 @@
-# webdriver Rust library [![Crate version](https://img.shields.io/crates/v/webdriver.svg)](https://crates.io/crates/webdriver) [![Documentation](https://docs.rs/webdriver/badge.svg)](https://docs.rs/webdriver/) [![Build status](https://travis-ci.org/mozilla/webdriver-rust.svg?branch=master)](https://travis-ci.org/mozilla/webdriver-rust) 
+webdriver library
+=================
+
+The [webdriver crate] is a library implementation of the wire protocol
+for the [W3C WebDriver standard] written in Rust.  WebDriver is a remote
+control interface that enables introspection and control of user agents.
+It provides a platform- and language-neutral wire protocol as a way
+for out-of-process programs to remotely instruct the behaviour of web
+browsers.
+
+The webdriver library provides the formal types, error codes, type and
+bounds checks, and JSON marshaling conventions for correctly parsing
+and emitting the WebDriver protocol.  It also provides an HTTP server
+where endpoints are mapped to the different WebDriver commands.
+
+**As of right now, this is an implementation for the server side of the
+WebDriver API in Rust, not the client side.**
+
+[webdriver crate]: https://crates.io/crates/webdriver
+[W3C WebDriver standard]: https://w3c.github.io/webdriver/webdriver-spec.html
+
+
+Building
+========
+
+The library is built using the usual [Rust conventions]:
+
+    % cargo build
+
+To run the tests:
+
+    % cargo test
+
+[Rust conventions]: http://doc.crates.io/guide.html
+
+
+Usage
+=====
+
+To start an HTTP server that handles incoming command requests, a request
+handler needs to be implemented.  It takes an incoming `WebDriverMessage`
+and emits a `WebDriverResponse`:
 
-As of right now this is an implementation
-for the server side of the WebDriver API in Rust,
-not the client side.
+	impl WebDriverHandler for MyHandler {
+	    fn handle_command(
+	        &mut self,
+	        _: &Option<Session>,
+	        msg: WebDriverMessage,
+	    ) -> WebDriverResult<WebDriverResponse> {
+	        …
+	    }
+
+	    fn delete_session(&mut self, _: &Option<Session>) {
+	        …
+	    }
+	}
+
+	let addr = SocketAddr::new("localhost", 4444);
+	let handler = MyHandler {};
+	let server = webdriver::server::start(addr, handler, vec![])?;
+	info!("Listening on {}", server.socket);
+
+It is also possible to provide so called [extension commands] by providing
+a vector of known extension routes, for which each new route needs to
+implement the `WebDriverExtensionRoute` trait.  Each route needs to map
+to a `WebDriverExtensionCommand`:
+
+	pub enum MyExtensionRoute { HelloWorld }
+	pub enum MyExtensionCommand { HelloWorld }
 
+	impl WebDriverExtensionRoute for MyExtensionRoute {
+	    fn command(
+	        &self,
+	        captures: &Captures,
+	        body: &Json,
+	    ) -> WebDriverResult<WebDriverCommand<MyExtensionCommand>> {
+	        …
+	    }
+	}
+
+	let extension_routes = vec![
+	    (Method::Get, "/session/{sessionId}/moz/hello", MyExtensions::HelloWorld)
+	];
+
+	…
+
+	let server = webdriver::server::start(addr, handler, extension_routes[..])?;
+
+[extension commands]: https://w3c.github.io/webdriver/webdriver-spec.html#dfn-extension-commands
+
+Contact
+=======
+
+The mailing list for webdriver discussion is
+tools-marionette@lists.mozilla.org ([subscribe], [archive]).
+
+There is also an IRC channel to talk about using and developing webdriver
+in #ateam on irc.mozilla.org.
+
+[subscribe]: https://lists.mozilla.org/listinfo/tools-marionette
+[archive]: http://groups.google.com/group/mozilla.tools.marionette