Open AtkinsSJ opened 2 years ago
Hey! This will probably seem a really dumb off-hopic noob question jumping onto a tracking issue, so I'm sorry but I was wondering if you folks plan to support WebDriver Bi-directional that utilizes WebSocket?
I thought it was a really useful protocol, and I had a lot of success using an prototype/prehistory implementation of it (Chrome Remote Debugging Protocol / Chrome DevTools Protocol) to create a virtualized remote isolated Browser (BrowserBox).
Hey! This will probably seem a really dumb off-hopic noob question jumping onto a tracking issue, so I'm sorry but I was wondering if you folks plan to support WebDriver Bi-directional that utilizes WebSocket?
I thought it was a really useful protocol, and I had a lot of success using an prototype/prehistory implementation of it (Chrome Remote Debugging Protocol / Chrome DevTools Protocol) to create a virtualized remote isolated Browser (BrowserBox).
Hi! I don't know about anyone else but I hadn't heard of the BiDi extension before. We don't really do plans, but that does seem interesting.
The main (only?) reason we're attempting to get WebDriver working is to be able to run the WPT test suite. So that's the focus here for now. But that does look like it would be convenient for building the browser devtools on top of, so we'll see.
Hey @AtkinsSJ Cool! Yes, it is useful for DevTools. In fact, as you probably already know, the Chrome DevTools is basically a front-end web app interface with functionality to instrument the browser built entirely using these protocol commands (I think ~~ I'm no expert!). The use of the protocol without WebSocket (using HTTP requests) may introduce some weird lag for some things you want to do.
Thanks for your reply, @AtkinsSJ and cool to hear you don't do plans! Very fun! :)
Hi! Just a quick fly-by comment re: webdriver bidi and devtools. As we're implementing WebDriver BiDi in Firefox, we built a small devtools-like frontend at https://github.com/firefox-devtools/bidi-webconsole-prototype
At the moment we only added a "webconsole" and a "netmonitor" (which is really just a list of request), but you could easily do more. We don't really have debugging APIs on the roadmap for the spec yet (https://github.com/w3c/webdriver-bidi/issues/), but maybe in the future we could imagine having a cross browser devtools based on webdriver bidi.
That's awesome! That is so cool, @juliandescottes. Really happy to see some external devtools that uses the protocol! 😃
WebDriver is the API for remote-controlling a Browser process, as used by WebPlatformTests. It has a lot of different endpoints, so to make it clear which ones are missing, here's a handy list!
To add an endpoint you'll need to modify the code in two places: The WebDriver end at
Userland/Services/WebDriver
, and the Browser end atUserland/Services/WebContent/WebDriver*
. Comment here or refer to this issue in your PR to get your endpoints checked off the list. :^)You can find the same table in the spec at https://w3c.github.io/webdriver/#endpoints
POST /session
New SessionDELETE /session/{session id}
Delete SessionGET /status
StatusGET /session/{session id}/timeouts
Get TimeoutsPOST /session/{session id}/timeouts
Set TimeoutsPOST /session/{session id}/url
Navigate ToGET /session/{session id}/url
Get Current URLPOST /session/{session id}/back
BackPOST /session/{session id}/forward
ForwardPOST /session/{session id}/refresh
RefreshGET /session/{session id}/title
Get TitleGET /session/{session id}/window
Get Window HandleDELETE /session/{session id}/window
Close WindowPOST /session/{session id}/window
Switch To WindowGET /session/{session id}/window/handles
Get Window HandlesPOST /session/{session id}/window/new
New WindowPOST /session/{session id}/frame
Switch To FramePOST /session/{session id}/frame/parent
Switch To Parent FrameGET /session/{session id}/window/rect
Get Window RectPOST /session/{session id}/window/rect
Set Window RectPOST /session/{session id}/window/maximize
Maximize WindowPOST /session/{session id}/window/minimize
Minimize WindowPOST /session/{session id}/window/fullscreen
Fullscreen WindowGET /session/{session id}/element/active
Get Active ElementGET /session/{session id}/element/{element id}/shadow
Get Element Shadow RootPOST /session/{session id}/element
Find ElementPOST /session/{session id}/elements
Find ElementsPOST /session/{session id}/element/{element id}/element
Find Element From ElementPOST /session/{session id}/element/{element id}/elements
Find Elements From ElementPOST /session/{session id}/shadow/{shadow id}/element
Find Element From Shadow RootPOST /session/{session id}/shadow/{shadow id}/elements
Find Elements From Shadow RootGET /session/{session id}/element/{element id}/selected
Is Element SelectedGET /session/{session id}/element/{element id}/attribute/{name}
Get Element AttributeGET /session/{session id}/element/{element id}/property/{name}
Get Element PropertyGET /session/{session id}/element/{element id}/css/{property name}
Get Element CSS ValueGET /session/{session id}/element/{element id}/text
Get Element TextGET /session/{session id}/element/{element id}/name
Get Element Tag NameGET /session/{session id}/element/{element id}/rect
Get Element RectGET /session/{session id}/element/{element id}/enabled
Is Element EnabledGET /session/{session id}/element/{element id}/computedrole
Get Computed RoleGET /session/{session id}/element/{element id}/computedlabel
Get Computed LabelPOST /session/{session id}/element/{element id}/click
Element ClickPOST /session/{session id}/element/{element id}/clear
Element ClearPOST /session/{session id}/element/{element id}/value
Element Send KeysGET /session/{session id}/source
Get Page SourcePOST /session/{session id}/execute/sync
Execute ScriptPOST /session/{session id}/execute/async
Execute Async ScriptGET /session/{session id}/cookie
Get All CookiesGET /session/{session id}/cookie/{name}
Get Named CookiePOST /session/{session id}/cookie
Add CookieDELETE /session/{session id}/cookie/{name}
Delete CookieDELETE /session/{session id}/cookie
Delete All CookiesPOST /session/{session id}/actions
Perform ActionsDELETE /session/{session id}/actions
Release ActionsPOST /session/{session id}/alert/dismiss
Dismiss AlertPOST /session/{session id}/alert/accept
Accept AlertGET /session/{session id}/alert/text
Get Alert TextPOST /session/{session id}/alert/text
Send Alert TextGET /session/{session id}/screenshot
Take ScreenshotGET /session/{session id}/element/{element id}/screenshot
Take Element ScreenshotPOST /session/{session id}/print
Print Page