了解Web驱动程序API

Gol*_*den 1 selenium webdriver node.js

如果我理解W3C关于WebDriver API的信息,那么实现此API的浏览器可以通过使用RESTful API实现自动化.也就是说,我可以打开与浏览器的HTTP连接,并使用REST向它发送命令.

我还发现了这个Gist,它证实了我的猜测是正确的:Node.js脚本直接连接到已作为WebDriver服务器启动的PhantomJS.

到现在为止还挺好.

我现在没有得到的是为什么显然对于任何其他浏览器我仍然需要Selenium服务器.即使像webdriverjs这样的项目也要求我运行Selenium服务器.

我的问题是:为什么?

如果没有额外的Selenium服务器,是不是可以自动化浏览器?浏览器是否无法直接提供此API(如PhantomJS显然那样)?

请问有人可以解决这个问题吗?

Jim*_*ans 5

你误解了W3C规范.虽然规范的第2.6节声明实现者必须提供协议的JSON-over-HTTP可访问的"远程端",但它也声明了实现:

可以采用独立可执行文件的形式,将JSON over HTTP协议转换为远程端使用的编码和传输机制.

所以,简单地说,不,可能不是你可能只是启动浏览器实例并期望通过HTTP连接到它.虽然PhantomJS确实将其WebDriver实现作为浏览器可执行文件的一部分包含在内,但您可能需要单独的可执行文件来实现此功能.例如,自动化Chrome需要一个单独的chromedriver可执行文件的实例,该实例可实现协议的HTTP服务器部分.

此外,重要的是要注意规范目前处于一个working draft阶段,尚未达到last callcandidate recommendation状态.这意味着所有浏览器供应商可能尚未发布此规范的实现.虽然目前正在进行的实施由Mozilla for Firefox完成,最近发布的一个用于Microsoft的Internet Explorer,但这些实现都尚未完成,并且这两个实现特别需要外部可执行文件来通过HTTP进行访问,就像Chrome一样.

因此,目前,使用Selenium服务器是目前不提供HTTP实现的浏览器的唯一选择.目前来自主要桌面浏览器供应商的列表包括Firefox,Internet Explorer和Safari.