Apple has announced support for WebDriver in Safari 10.0, along with Web Inspector, and a new JavaScript profiler.
Safari is the last major browser to support the tool for automating web application testing, with Microsoft announcing in 2015 support for WebDriver in its Edge browser.
In the update What's New in Safari Apple says that the inclusion of safari driver
will provide "a set of interfaces to manipulate DOM elements and control the browser’s behavior" and that developers should enable Remote Automation in the Develop menu before launching the server using /usr/bin/safaridriver
.
David Burns, the engineer manager at Mozilla blogging on The Automated Tester, explains the importance of safari driver
over Selenium. Burns uses the recent example of Firefox 47, saying "In Firefox 47, Selenium caused Firefox to crash on startup. The Mozilla implementation of WebDriver, called Marionette and GeckoDriver, would never have hit this problem because test failures and crashes like this would lead to patches being reverted and never shipped to end users."
Web Inspector features new to Safari 10 include new timelines to help web developers visualise application memory usage, as well as plotting heap allocation snapshots over time, helping developers to identify areas to improve for optimal memory performance.
Apple's also promises to deliver "fast performance" with its new JavaScript sampling profiler by sampling running code at a high resolution while disabling debugging tools.
Also significant in the 10.0 release is "complete support" for ES6 for OSX and iOS, bringing Proper Tail Calls (PTC) to Safari. Michael Saboff, a software engineer at Apple working on WebKit, elaborates on the importance of ECMAScript 6 in the blog post ECMAScript 6 Proper Tail Calls in WebKit saying:
This feature was added to facilitate recursive programming patterns, both for direct and indirect recursion. Various other design patterns can benefit from PTC as well, such as code that wraps some functionality where the wrapping code directly returns the result of what it wraps. Through the use of PTC, the amount of memory needed to run code is reduced. In deeply recursive code, PTC enables code to run that would otherwise throw a stack overflow exception.