Elements (via xpath, id or name) are not found with the Firefox driver. Chromium works fine, too.
Reason is that the webdriver spec changed lately, the "web element identifier" is now element-6066-11e4-a52e-4f735466cecf instead of the previous ELEMENT. geckodriver already follows this, chromedriver not.
https://github.com/instaclick/php-webdriver/commit/be87042314cc654f7ff3e26c20a998cadb23daac
https://w3c.github.io/webdriver/webdriver-spec.html
Run your local firefox installation in marionette mode:
$ firefox --marionette 1508154717660 Marionette INFO Enabled via --marionette 1508154718454 Marionette INFO Listening on port 2828
Run geckodriver WebDriver proxy:
$ ./bin/geckodriver --connect-existing --marionette-port 2828 1508154721745 geckodriver INFO geckodriver 0.19.0 1508154721755 geckodriver INFO Listening on 127.0.0.1:4444
Use curl to control it:
$ curl -s -d '{}' http://localhost:4444/session | jq . { "value": { "sessionId": "f1c4ec02-3edc-4308-a0a8-697edd383b9a", "capabilities": { "acceptInsecureCerts": false, "browserName": "firefox", "browserVersion": "56.0", "moz:accessibilityChecks": false, "moz:headless": false, "moz:processID": 26238, "moz:profile": "/home/cweiske/.mozilla/firefox/u05dh3q4.default", "pageLoadStrategy": "normal", "platformName": "linux", "platformVersion": "4.12.3cw", "rotatable": false, "specificationLevel": 0, "timeouts": { "implicit": 0, "pageLoad": 300000, "script": 30000 } } } } $ session=f1c4ec02-3edc-4308-a0a8-697edd383b9a $ curl -s -d '{"url":"http://example.org"}' http://localhost:4444/session/$session/url | jq . { "value": {} } $ curl -s http://localhost:4444/session/$session/title | jq . { "value": "Example Domain" } $ curl -s http://localhost:4444/session/$session/url | jq . { "value": "http://example.org/" } $ curl -s -d '{"using":"xpath","value":"//h1"}' http://localhost:4444/session/$session/element | jq . { "value": { "element-6066-11e4-a52e-4f735466cecf": "4131ac8d-651c-4903-8b04-a591f4f7456f" } } $ curl -s -d '{"using":"xpath","value":"//h1"}' http://localhost:4444/session/$session/elements | jq . { "value": [ { "element-6066-11e4-a52e-4f735466cecf": "30f5c6ca-6fc5-4f23-b331-d102872b4238" } ] } $ curl -s -d '{"using":"xpath","value":"//doesnotexist"}' http://localhost:4444/session/$session/element | jq . { "value": { "error": "no such element", "message": "Unable to locate element: //doesnotexist", "stacktrace": "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 - <webdriver::server::Dispatcher<T, U>>::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 - <F as alloc::boxed::FnBox<A>>::call_box::h953e5f59694972c5\n 9: 0x5dc00b - alloc::boxed::{{impl}}::call_once<(),()>\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" } }
Install chromedriver:
$ sudo apt install chromium-chromedriver
Start chromedriver:
$ /usr/lib/chromium-browser/chromedriver Starting ChromeDriver 2.30 on port 9515 Only local connections are allowed.
Use curl to talk with chromedriver:
$ curl -s -d '{"desiredCapabilities":{"browserName":"chromium"}}' http://localhost:9515/session | jq . { "sessionId": "dafbc0093bb64659b23a4b862f3e4a7a", "status": 0, "value": { "acceptSslCerts": true, "applicationCacheEnabled": false, "browserConnectionEnabled": false, "browserName": "chrome", "chrome": { "chromedriverVersion": "2.30", "userDataDir": "/tmp/.org.chromium.Chromium.DDa2Ki" }, "cssSelectorsEnabled": true, "databaseEnabled": false, "handlesAlerts": true, "hasTouchScreen": false, "javascriptEnabled": true, "locationContextEnabled": true, "mobileEmulationEnabled": false, "nativeEvents": true, "networkConnectionEnabled": false, "pageLoadStrategy": "normal", "platform": "Linux", "rotatable": false, "setWindowRect": true, "takesHeapSnapshot": true, "takesScreenshot": true, "unexpectedAlertBehaviour": "", "version": "61.0.3163.100", "webStorageEnabled": true } } $ curl -s -d '{"url":"http://example.org"}' http://localhost:9515/session/$session/url | jq . { "sessionId": "dafbc0093bb64659b23a4b862f3e4a7a", "status": 0, "value": null } $ curl -s http://localhost:9515/session/$session/url | jq . { "sessionId": "dafbc0093bb64659b23a4b862f3e4a7a", "status": 0, "value": "http://example.org/" } $ curl -s http://localhost:9515/session/$session/title | jq . { "sessionId": "dafbc0093bb64659b23a4b862f3e4a7a", "status": 0, "value": "Example Domain" } $ curl -s -d '{"using":"xpath","value":"//h1"}' http://localhost:9515/session/$session/element | jq . { "sessionId": "dafbc0093bb64659b23a4b862f3e4a7a", "status": 0, "value": { "ELEMENT": "0.2185920045857399-1" } } $ curl -s -d '{"using":"xpath","value":"//h1"}' http://localhost:9515/session/$session/elements | jq . { "sessionId": "dafbc0093bb64659b23a4b862f3e4a7a", "status": 0, "value": [ { "ELEMENT": "0.2185920045857399-1" } ] }