<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<oembed><type>rich</type><version>1.0</version><provider_name>phorkie</provider_name><provider_url>https://p.cweiske.de/</provider_url><title>WebDriver cli test</title><author_name>Christian Weiske</author_name><cache_age>86400</cache_age><width>900</width><height>900</height><html>&lt;!-- embedding all files of https://p.cweiske.de/497 --&gt;
&lt;link rel="stylesheet" href="https://p.cweiske.de/css/embed.css"/&gt;
&lt;div class="phork" id="497"&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  
&lt;div class="document"&gt;


&lt;div class="section" id="problems"&gt;
&lt;h1&gt;Problems&lt;/h1&gt;
&lt;p&gt;Elements (via xpath, id or name) are not found with the Firefox driver. Chromium works fine, too.&lt;/p&gt;
&lt;p&gt;Reason is that the webdriver spec changed lately, the &amp;quot;web element identifier&amp;quot; is now &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;element-6066-11e4-a52e-4f735466cecf&lt;/span&gt;&lt;/tt&gt; instead of the previous &lt;tt class="docutils literal"&gt;ELEMENT&lt;/tt&gt;. geckodriver already follows this, chromedriver not.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/instaclick/php-webdriver/commit/be87042314cc654f7ff3e26c20a998cadb23daac"&gt;https://github.com/instaclick/php-webdriver/commit/be87042314cc654f7ff3e26c20a998cadb23daac&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="webdriver-with-firefox"&gt;
&lt;h1&gt;WebDriver with Firefox&lt;/h1&gt;
&lt;p&gt;&lt;a class="reference external" href="https://w3c.github.io/webdriver/webdriver-spec.html"&gt;https://w3c.github.io/webdriver/webdriver-spec.html&lt;/a&gt;&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Run your local firefox installation in marionette mode:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$  firefox --marionette
1508154717660       Marionette      INFO    Enabled via --marionette
1508154718454       Marionette      INFO    Listening on port 2828
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Run &lt;a class="reference external" href="https://github.com/mozilla/geckodriver/releases"&gt;geckodriver&lt;/a&gt; WebDriver proxy:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ ./bin/geckodriver --connect-existing --marionette-port 2828
1508154721745       geckodriver     INFO    geckodriver 0.19.0
1508154721755       geckodriver     INFO    Listening on 127.0.0.1:4444
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Use &lt;tt class="docutils literal"&gt;curl&lt;/tt&gt; to control it:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ curl -s -d '{}' http://localhost:4444/session | jq .
{
  &amp;quot;value&amp;quot;: {
        &amp;quot;sessionId&amp;quot;: &amp;quot;f1c4ec02-3edc-4308-a0a8-697edd383b9a&amp;quot;,
        &amp;quot;capabilities&amp;quot;: {
          &amp;quot;acceptInsecureCerts&amp;quot;: false,
          &amp;quot;browserName&amp;quot;: &amp;quot;firefox&amp;quot;,
          &amp;quot;browserVersion&amp;quot;: &amp;quot;56.0&amp;quot;,
          &amp;quot;moz:accessibilityChecks&amp;quot;: false,
          &amp;quot;moz:headless&amp;quot;: false,
          &amp;quot;moz:processID&amp;quot;: 26238,
          &amp;quot;moz:profile&amp;quot;: &amp;quot;/home/cweiske/.mozilla/firefox/u05dh3q4.default&amp;quot;,
          &amp;quot;pageLoadStrategy&amp;quot;: &amp;quot;normal&amp;quot;,
          &amp;quot;platformName&amp;quot;: &amp;quot;linux&amp;quot;,
          &amp;quot;platformVersion&amp;quot;: &amp;quot;4.12.3cw&amp;quot;,
          &amp;quot;rotatable&amp;quot;: false,
          &amp;quot;specificationLevel&amp;quot;: 0,
          &amp;quot;timeouts&amp;quot;: {
            &amp;quot;implicit&amp;quot;: 0,
            &amp;quot;pageLoad&amp;quot;: 300000,
            &amp;quot;script&amp;quot;: 30000
          }
        }
  }
}

$ session=f1c4ec02-3edc-4308-a0a8-697edd383b9a

$ curl -s -d '{&amp;quot;url&amp;quot;:&amp;quot;http://example.org&amp;quot;}' http://localhost:4444/session/$session/url | jq .
{
  &amp;quot;value&amp;quot;: {}
}

$ curl -s  http://localhost:4444/session/$session/title | jq .
{
  &amp;quot;value&amp;quot;: &amp;quot;Example Domain&amp;quot;
}

$ curl -s  http://localhost:4444/session/$session/url | jq .
{
  &amp;quot;value&amp;quot;: &amp;quot;http://example.org/&amp;quot;
}

$ curl -s -d '{&amp;quot;using&amp;quot;:&amp;quot;xpath&amp;quot;,&amp;quot;value&amp;quot;:&amp;quot;//h1&amp;quot;}'  http://localhost:4444/session/$session/element | jq .
{
  &amp;quot;value&amp;quot;: {
    &amp;quot;element-6066-11e4-a52e-4f735466cecf&amp;quot;: &amp;quot;4131ac8d-651c-4903-8b04-a591f4f7456f&amp;quot;
  }
}

$ curl -s -d '{&amp;quot;using&amp;quot;:&amp;quot;xpath&amp;quot;,&amp;quot;value&amp;quot;:&amp;quot;//h1&amp;quot;}'  http://localhost:4444/session/$session/elements | jq .
{
  &amp;quot;value&amp;quot;: [
    {
      &amp;quot;element-6066-11e4-a52e-4f735466cecf&amp;quot;: &amp;quot;30f5c6ca-6fc5-4f23-b331-d102872b4238&amp;quot;
    }
  ]
}

$ curl -s -d '{&amp;quot;using&amp;quot;:&amp;quot;xpath&amp;quot;,&amp;quot;value&amp;quot;:&amp;quot;//doesnotexist&amp;quot;}'  http://localhost:4444/session/$session/element | jq .
{
  &amp;quot;value&amp;quot;: {
    &amp;quot;error&amp;quot;: &amp;quot;no such element&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Unable to locate element: //doesnotexist&amp;quot;,
    &amp;quot;stacktrace&amp;quot;: &amp;quot;stack backtrace:\n   0:           0x4f388c - backtrace::backtrace::trace::h736111741fa0878e\n   1:           0x4f38c2 - backtrace::capture::Backtrace::new::h63b8a5c0787510c9\n   2:           0x442d88 - webdriver::error::WebDriverError::new::hea6d4dbf778b2b24\n   3:           0x44cecc - geckodriver::marionette::MarionetteSession::response::h98d048d51a7ee2ba\n   4:           0x42c729 - &amp;lt;webdriver::server::Dispatcher&amp;lt;T, U&amp;gt;&amp;gt;::run::hba9181b5aacf8f04\n   5:           0x402c59 - std::sys_common::backtrace::__rust_begin_short_backtrace::h19de262639927233\n   6:           0x40c065 - std::panicking::try::do_call::h6c1659fc4d01af51\n   7:           0x5e38ec - panic_unwind::__rust_maybe_catch_panic\n                        at /checkout/src/libpanic_unwind/lib.rs:98\n   8:           0x420d32 - &amp;lt;F as alloc::boxed::FnBox&amp;lt;A&amp;gt;&amp;gt;::call_box::h953e5f59694972c5\n   9:           0x5dc00b - alloc::boxed::{{impl}}::call_once&amp;lt;(),()&amp;gt;\n                        at /checkout/src/liballoc/boxed.rs:661\n                         - std::sys_common::thread::start_thread\n                        at /checkout/src/libstd/sys_common/thread.rs:21\n                         - std::sys::imp::thread::{{impl}}::new::thread_start\n                        at /checkout/src/libstd/sys/unix/thread.rs:84&amp;quot;
  }
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/497/rev-raw/0215bc79acc75cf3365df2426d8f2d1d4fb51c8d/README.rst" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/497#README.rst"&gt;README.rst&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  
&lt;div class="document" id="chromium"&gt;
&lt;h1 class="title"&gt;Chromium&lt;/h1&gt;

&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Install chromedriver:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ sudo apt install chromium-chromedriver
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Start chromedriver:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ /usr/lib/chromium-browser/chromedriver
Starting ChromeDriver 2.30 on port 9515
Only local connections are allowed.
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Use curl to talk with chromedriver:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
$ curl -s -d '{&amp;quot;desiredCapabilities&amp;quot;:{&amp;quot;browserName&amp;quot;:&amp;quot;chromium&amp;quot;}}' http://localhost:9515/session | jq .
{
  &amp;quot;sessionId&amp;quot;: &amp;quot;dafbc0093bb64659b23a4b862f3e4a7a&amp;quot;,
  &amp;quot;status&amp;quot;: 0,
  &amp;quot;value&amp;quot;: {
    &amp;quot;acceptSslCerts&amp;quot;: true,
    &amp;quot;applicationCacheEnabled&amp;quot;: false,
    &amp;quot;browserConnectionEnabled&amp;quot;: false,
    &amp;quot;browserName&amp;quot;: &amp;quot;chrome&amp;quot;,
    &amp;quot;chrome&amp;quot;: {
      &amp;quot;chromedriverVersion&amp;quot;: &amp;quot;2.30&amp;quot;,
      &amp;quot;userDataDir&amp;quot;: &amp;quot;/tmp/.org.chromium.Chromium.DDa2Ki&amp;quot;
    },
    &amp;quot;cssSelectorsEnabled&amp;quot;: true,
    &amp;quot;databaseEnabled&amp;quot;: false,
    &amp;quot;handlesAlerts&amp;quot;: true,
    &amp;quot;hasTouchScreen&amp;quot;: false,
    &amp;quot;javascriptEnabled&amp;quot;: true,
    &amp;quot;locationContextEnabled&amp;quot;: true,
    &amp;quot;mobileEmulationEnabled&amp;quot;: false,
    &amp;quot;nativeEvents&amp;quot;: true,
    &amp;quot;networkConnectionEnabled&amp;quot;: false,
    &amp;quot;pageLoadStrategy&amp;quot;: &amp;quot;normal&amp;quot;,
    &amp;quot;platform&amp;quot;: &amp;quot;Linux&amp;quot;,
    &amp;quot;rotatable&amp;quot;: false,
    &amp;quot;setWindowRect&amp;quot;: true,
    &amp;quot;takesHeapSnapshot&amp;quot;: true,
    &amp;quot;takesScreenshot&amp;quot;: true,
    &amp;quot;unexpectedAlertBehaviour&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;version&amp;quot;: &amp;quot;61.0.3163.100&amp;quot;,
    &amp;quot;webStorageEnabled&amp;quot;: true
  }
}

$ curl -s -d '{&amp;quot;url&amp;quot;:&amp;quot;http://example.org&amp;quot;}' http://localhost:9515/session/$session/url | jq .
{
  &amp;quot;sessionId&amp;quot;: &amp;quot;dafbc0093bb64659b23a4b862f3e4a7a&amp;quot;,
  &amp;quot;status&amp;quot;: 0,
  &amp;quot;value&amp;quot;: null
}

$ curl -s http://localhost:9515/session/$session/url | jq .
{
  &amp;quot;sessionId&amp;quot;: &amp;quot;dafbc0093bb64659b23a4b862f3e4a7a&amp;quot;,
  &amp;quot;status&amp;quot;: 0,
  &amp;quot;value&amp;quot;: &amp;quot;http://example.org/&amp;quot;
}

$ curl -s http://localhost:9515/session/$session/title | jq .
{
  &amp;quot;sessionId&amp;quot;: &amp;quot;dafbc0093bb64659b23a4b862f3e4a7a&amp;quot;,
  &amp;quot;status&amp;quot;: 0,
  &amp;quot;value&amp;quot;: &amp;quot;Example Domain&amp;quot;
}

$ curl -s -d '{&amp;quot;using&amp;quot;:&amp;quot;xpath&amp;quot;,&amp;quot;value&amp;quot;:&amp;quot;//h1&amp;quot;}'  http://localhost:9515/session/$session/element | jq .
{
  &amp;quot;sessionId&amp;quot;: &amp;quot;dafbc0093bb64659b23a4b862f3e4a7a&amp;quot;,
  &amp;quot;status&amp;quot;: 0,
  &amp;quot;value&amp;quot;: {
    &amp;quot;ELEMENT&amp;quot;: &amp;quot;0.2185920045857399-1&amp;quot;
  }
}

$ curl -s -d '{&amp;quot;using&amp;quot;:&amp;quot;xpath&amp;quot;,&amp;quot;value&amp;quot;:&amp;quot;//h1&amp;quot;}'  http://localhost:9515/session/$session/elements | jq .
{
  &amp;quot;sessionId&amp;quot;: &amp;quot;dafbc0093bb64659b23a4b862f3e4a7a&amp;quot;,
  &amp;quot;status&amp;quot;: 0,
  &amp;quot;value&amp;quot;: [
    {
      &amp;quot;ELEMENT&amp;quot;: &amp;quot;0.2185920045857399-1&amp;quot;
    }
  ]
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/497/rev-raw/0215bc79acc75cf3365df2426d8f2d1d4fb51c8d/chrome.rst" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/497#chrome.rst"&gt;chrome.rst&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</html></oembed>
