|
|
# Testing geckodriver
|
|
|
|
|
|
We verify and test geckodriver in a couple of different ways.
|
|
|
Since it is an implementation of the WebDriver web standard, we share
|
|
|
a set of conformance tests with other browser vendors through the
|
|
|
[Web Platform Tests] (WPT) initiative. This lets us ensure web
|
|
|
compatibility between _different_ WebDriver implementations for
|
|
|
different browsers.
|
|
|
|
|
|
In addition to the WPT tests, geckodriver and webdriver have
|
|
|
unit tests. These are written in Rust, but you must explicitly
|
|
|
tell mach to build these by adding the following line to your [mozconfig]:
|
|
|
|
|
|
```make
|
|
|
ac_add_options --enable-rust-tests
|
|
|
```
|
|
|
|
|
|
Tests can then be run by using the `test` sub command for [cargo] in the
|
|
|
specific source folder:
|
|
|
|
|
|
```shell
|
|
|
% cd testing/geckodriver/src
|
|
|
% cargo test
|
|
|
```
|
|
|
|
|
|
To run the more extensive WPT tests you can use mach, but first
|
|
|
make sure you have built Firefox:
|
|
|
|
|
|
```shell
|
|
|
% ./mach build
|
|
|
% ./mach wpt testing/web-platform/tests/webdriver
|
|
|
```
|
|
|
|
|
|
As these are functional integration tests and pop up Firefox windows
|
|
|
sporadically, a helpful tip is to suppress the window whilst you
|
|
|
are running them by using Firefox’ [headless mode]:
|
|
|
|
|
|
```shell
|
|
|
% ./mach wpt --headless testing/web-platform/tests/webdriver
|
|
|
```
|
|
|
|
|
|
The `--headless` flag is equivalent to setting the `MOZ_HEADLESS`
|
|
|
output variable. In addition to `MOZ_HEADLESS` there is also
|
|
|
`MOZ_HEADLESS_WIDTH` and `MOZ_HEADLESS_HEIGHT` for controlling the
|
|
|
dimensions of the no-op virtual display. This is similar to using
|
|
|
Xvfb(1) which you may know from the X windowing system, but has
|
|
|
the additional benefit of also working on macOS and Windows.
|
|
|
|
|
|
As you get in to development of geckodriver and Marionette you will
|
|
|
increasingly grow to understand our love for [trace-level logs].
|
|
|
They provide us with the input—the HTTP requests—from the client
|
|
|
(in WPT’s case from the tests’ use of a custom WebDriver client),
|
|
|
the translation geckodriver makes to the [Marionette protocol],
|
|
|
the log output from Marionette, its responses back to geckodriver,
|
|
|
and finally the output—or the HTTP response—back to the client.
|
|
|
|
|
|
The [trace-level logs] can be surfaced by passing on the `-vv`
|
|
|
flag to geckodriver through WPT:
|
|
|
|
|
|
```shell
|
|
|
% ./mach wpt --webdriver-arg=-vv testing/web-platform/tests/webdriver
|
|
|
```
|
|
|
|
|
|
[Web Platform Tests]: http://web-platform-tests.org/
|
|
|
[cargo]: http://doc.crates.io/guide.html
|
|
|
[headless mode]: https://developer.mozilla.org/en-US/Firefox/Headless_mode
|
|
|
[mozconfig]: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Configuring_Build_Options
|
|
|
[trace-level logs]: TraceLogs.md
|
|
|
[Marionette protocol]: /testing/marionette/Protocol.md
|