WebDriver is a remote control interface that enables introspection and control of user agents. As such it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications: WebDriver classic (HTTP) and the new WebDriver BiDi (Bi-Directional).
This newsletter gives an overview of the work we’ve done as part of the Firefox 125 release cycle.
Contributions
With Firefox being an open source project, we are grateful to get contributions from people outside of Mozilla.
WebDriver code is written in JavaScript, Python, and Rust so any web developer can contribute! Read how to setup the work environment and check the list of mentored issues for Marionette.
General
New: Support for the “userAgent” capability
We added support for the User Agent capability which is returned with all the other capabilities by the new session commands. It is listed under the userAgent
key and contains the default user-agent string of the browser. For instance when connecting to Firefox 125 (here on macos), the capabilities will contain a userAgent
property such as:
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.0"
WebDriver BiDi
New: Support for the “input.setFiles” command
The “input.setFiles” command is a new feature which allows clients to interact with <input>
elements with type="file"
. As the name suggests, it can be used to set the list of files of such an input. The command expects three mandatory parameters. First the context
parameter identifies the BrowsingContext (tab or window) where we expect to find an <input type="file">
. Then element
should be a sharedReference to this specific <input>
element. Finally the files
parameter should be a list (potentially empty) of strings which are the paths of the files to set for the <input>
. This command has a null
return value.
-> {
"method": "input.setFiles",
"params": {
"context": "096fca46-5860-412b-8107-dae7a80ee412",
"element": {
"sharedId": "520c3e2b-6210-41da-8ae3-2c499ad66049"
},
"files": [
"/Users/test/somefile.txt"
]
},
"id": 7
}
<- { "type": "success", "id": 7, "result": {} }
Note that providing more than one path in the files
parameter is only supported for <input>
elements with the multiple
attribute set. Trying to send several paths to a regular <input>
element will result in an error.
It’s also worth highlighting that the command will override the files which were previously set on the input. For instance providing an empty list as the files
parameter will reset the input to have no file selected.
New: Support for the “storage.deleteCookies” command
In Firefox 124, we added two methods to interact with cookies: “storage.getCookies” and “storage.setCookie”. In Firefox 125 we are adding “storage.deleteCookies” so that you can remove previously created cookies. The parameters for the “deleteCookies” command are identical to the ones for the “getCookies” command: the filter
argument allows to match cookies based on specific criteria and the partition
argument allows to match cookies owned by a certain storage partition. All the cookies matching the provided parameters will be deleted. Similarly to “getCookies” and “setCookie”, “deleteCookies” will return the partitionKey
which was built to retrieve the cookies.
# Assuming we have two cookies on fxfdx.dev, foo=value1 and bar=value2
-> {
"method": "storage.deleteCookies",
"params": {
"filter": {
"name": "foo",
"domain": "fxdx.dev"
}
},
"id": 8
}
<- { "type": "success", "id": 8, "result": { "partitionKey": {} } }
-> {
"method": "storage.getCookies",
"params": {
"filter": {
"domain": "fxdx.dev"
}
},
"id": 9
}
<- {
"type": "success",
"id": 9,
"result": {
"cookies": [
{
"domain": "fxdx.dev",
"httpOnly": false,
"name": "bar",
"path": "/",
"sameSite": "none",
"secure": false,
"size": 9,
"value": {
"type": "string",
"value": "value2"
}
}
],
"partitionKey": {}
}
}
New: Support for the “userContext” property in the “partition” argument
All storage commands accept a partition
parameter to specify which storage partition it should use, whether it is to retrieve, create or delete cookie(s). Clients can now provide a userContext
property in the partition
parameter to build a partition key tied to a specific user context. As a reminder, user contexts are collections of browsing contexts sharing the same storage partition, and are implemented as Containers in Firefox.
-> { "method": "browser.createUserContext", "params": {}, "id": 8 }
<- { "type": "success", "id": 8, "result": { "userContext": "6ade5b81-ef5b-4669-83d6-8119c238a3f7" } }
-> {
"method": "storage.setCookie",
"params": {
"cookie": {
"name": "test",
"value": {
"type": "string",
"value": "cookie in user context partition"
},
"domain": "fxdx.dev"
},
"partition": {
"type": "storageKey",
"userContext": "6ade5b81-ef5b-4669-83d6-8119c238a3f7"
}
},
"id": 9
}
<- { "type": "success", "id": 9, "result": { "partitionKey": { "userContext": "6ade5b81-ef5b-4669-83d6-8119c238a3f7" } } }
Bug fixes
- Fixed a bug where “storage.getCookies” would not retrieve all expected cookies for a
partition
with a given “sourceOrigin”. - Fixed an issue where recommended preferences would not be applied if WebDriver BiDi is the only remote protocol enabled, which means CDP is disabled.
- Fixed an issue where creating and switching to a new tab would not wait for the
visibilityState
to be updated.
Leave a Reply