The State of Selenium 3 WebDrivers

Background on Selenium 3 WebDrivers

… all the major browser vendors ship their own implementations (Apple, Google, Microsoft, and Mozilla).
… there is now a W3C specification for browser automation, based on the Open Source WebDriver. This has yet to reach “recommendation” status, but the people working on it (including members of the Selenium project!) are now focusing on finishing the text and writing the implementations.
– https://seleniumhq.wordpress.com/2016/10/13/selenium-3-0-out-now/

The Issue

While official support from browser vendors and an accompanying W3C spec are a step in the right direction, we are in the midst of a transition phase. The spec is still in “working” status. So any vague specs are either implemented as the browser vendor sees fit or not at all.

Examples

Mozilla and “Actions”

So the deal is that “actions” is terribly underspecified. I have been trying to fix that, but it’s very unclear to me what the semantics are supposed to be (e.g. when you move the mouse, should events be dispatched on all the elements along the pointers’ path). Until that is clear it’s not going to be possible to make this work the same way across multiple implementations.
– https://github.com/SeleniumHQ/selenium/issues/2285#issuecomment-227742441

Track the status of the implementation:

Apple and “Wait”

I haven’t found a bug tracker for this issue but the (above) screenshot shows that “Wait” is not implemented in Safari. This test runs fine on all the other browsers you see in the screenshot.

Workarounds

Until such time as the WebDrivers are fully fleshed out and implemented you’ll have to craft your own code if you want to test in all browsers. I do what I can in JavaScript using the JavascriptExecutor.

The Method:

The Usage:

 Non-Selenium 3 Specific Issue – IE .Click()

The IE WebDriver is still packaged with the Selenium download [Source] and to my knowledge not made by Microsoft (their efforts seem focused on Edge at this time). The .Click() implementation has mixed results [Source]. So I use JavaScript’s .click() instead.