1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-19 00:15:08 +00:00
Commit graph

65 commits

Author SHA1 Message Date
Timothy Flynn
3c00d0e92b Browser+WebContent+WebDriver: Move Get Element Property to WebContent 2022-11-10 17:02:11 +00:00
Timothy Flynn
1bc94e135f Browser+WebContent+WebDriver: Move Get Element Attribute to WebContent
In doing so, this also implements a FIXME to handle boolean attributes.
2022-11-10 17:02:11 +00:00
Timothy Flynn
04ea3992e9 Browser+WebContent+WebDriver: Move Is Element Selected to WebContent 2022-11-10 17:02:11 +00:00
Timothy Flynn
560da56a1d Browser+WebContent+WebDriver: Move Find Elements From Element to WC
This also lets us remove the element location strategy and some
WebContent IPC from Browser/LibWebView now that they are unused.
2022-11-10 13:10:16 +00:00
Timothy Flynn
5a750dc58c WebContent+WebDriver: Move Find Element From Element to WebContent 2022-11-10 13:10:16 +00:00
Timothy Flynn
6dca784fc4 WebContent+WebDriver: Move Find Elements to WebContent 2022-11-10 13:10:16 +00:00
Timothy Flynn
61de50c7fd WebContent+WebDriver: Move Find Element to WebContent
Note that this does nothing to "fix" how element references are created.
We continue to return the element ID because, otherwise, all other
element WebDriver endpoints would break.

On the bright side, we avoid several IPC round trips now that we perform
the entire 'find' operation in the WebContent process; and we are able
to work directly on DOM nodes.
2022-11-10 13:10:16 +00:00
Timothy Flynn
03d0c7a5b6 Browser+WebContent+WebDriver: Move [Max,Min]imize Window to WebContent
This also lets us more fully implement the "iconify the window" method,
which requires we block until the document reaches the "hidden" state.
2022-11-09 19:59:26 +00:00
Timothy Flynn
b57d7e4332 Browser+WebContent+WebDriver: Move Get/Set Window Rect to WebContent
This also lets us more fully implement the "restore the window" method,
which requires we block until the document reaches the "visible" state.
2022-11-09 19:59:26 +00:00
Timothy Flynn
cc78a74c51 WebContent+WebDriver: Fully implement closing a session
There were a couple steps missing to close the remote end. Further, we
were not removing the session from the list of active sessions.
2022-11-08 19:58:34 -05:00
Timothy Flynn
3ba6b5a7cb WebContent+WebDriver: Move the Get Current URL command to WebContent 2022-11-08 19:58:34 -05:00
Timothy Flynn
31bb79295d WebContent+WebDriver: Move the Navigate To command to WebContent 2022-11-08 19:58:34 -05:00
Timothy Flynn
f7c212a19d WebContent+WebDriver: Set the navigator.webdriver flag from WebDriver
This moves setting the navigator.webdriver flag from after WebContent
creates the WebDriver connection, to its own IPC to be triggered from
WebDriver. This is closer to the spec, but mostly serves as an easy
test to validate the connection.
2022-11-08 19:58:34 -05:00
Timothy Flynn
8ae10ba0fd LibWeb+WebDriver: Add an IPC-transferable Web::WebDriver::Response class
This is essentially an ErrorOr<JsonValue, Web::WebDriver::Error> class.
Unfortunately, that ErrorOr would not be default-constructible, which is
required for the generated IPC classes. So this is a thin wrapper around
a Variant<JsonValue, Web::WebDriver::Error> to emulate ErrorOr.
2022-11-08 19:58:34 -05:00
Timothy Flynn
0246abec80 LibWeb+WebDriver: Move WebDriverError to Web::WebDriver::Error
This is to prepare for WebContent becoming the WebDriver client.
2022-11-08 19:58:34 -05:00
Timothy Flynn
b0eb45f7c7 WebDriver+Browser: Implement GET /session/{id}/element/{id}/screenshot 2022-11-05 01:10:03 +00:00
Timothy Flynn
2d75229192 WebDriver+Browser: Implement GET /session/{id}/element/{id}/selected 2022-11-03 19:40:43 -04:00
Timothy Flynn
0f2b4d0aac WebDriver+Browser: Implement GET /session/{id}/element/{id}/enabled 2022-11-03 19:15:43 +00:00
Timothy Flynn
08c687ef20 WebDriver+Browser: Implement GET /session/{id}/element/{id}/rect 2022-11-03 19:15:43 +00:00
Timothy Flynn
61d0b66bfb WebDriver+Browser: Implement GET /session/{id}/source 2022-11-03 14:48:04 +00:00
Linus Groh
629fbc2cfc WebDriver: Implement POST /session/{session id}/execute/async endpoint 2022-11-02 23:46:30 +00:00
Linus Groh
f88a0c51a3 WebDriver: Implement POST /session/{session id}/execute/sync endpoint 2022-11-02 23:46:30 +00:00
Linus Groh
6e1131e6de WebDriver: Support "data" field in error responses 2022-11-02 23:46:30 +00:00
Timothy Flynn
1ffaad29e1 WebDriver+Browser: Implement GET /session/{id}/screenshot
This doesn't follow the spec to a tee. Our OutOfProcessWebView already
has a bitmap that can be used as the window screenshot. Therefore, we
can bypass the steps that assume we need to access the window's frame
buffer in-flight.

We also don't create an HTMLCanvasElement. We would need a Document in
the WebDriver process to do so. Instead, we can still run the encoding
steps exactly as-is using the screenshot bitmap.
2022-11-02 17:55:37 +00:00
Timothy Flynn
819598aecf WebContent: Support sending large responses to the WebDriver client
Some endpoints, like /session/{id}/screenshot, will require sending
large data to the client. We won't be able to write all of the data in
one shot, so loop over the data until we've sent it all (or fail).
2022-11-02 17:55:37 +00:00
Timothy Flynn
11d0489fa3 WebDriver+Browser: Implement POST /session/{id}/window/minimize 2022-11-02 15:41:19 +00:00
Timothy Flynn
89b2ff72f7 WebDriver+Browser: Implement POST /session/{id}/window/maximize 2022-11-02 15:41:19 +00:00
Timothy Flynn
174248678e WebDriver+Browser: Implement POST /session/{id}/window/rect 2022-11-02 15:41:19 +00:00
Timothy Flynn
dac91c5790 WebDriver+Browser: Implement GET /session/{id}/window/rect 2022-11-02 15:41:19 +00:00
Timothy Flynn
7561308af1 WebDriver: Convert a couple tabs to spaces 2022-11-02 15:41:19 +00:00
martinfalisse
76da0c6c54 WebDriver: Implement GET /session/{id}/element/{id}/text endpoint 2022-11-01 10:55:34 +00:00
demostanis
3e8b5ac920 AK+Everywhere: Turn bool keep_empty to an enum in split* functions 2022-10-24 23:29:18 +01:00
Tobias Christiansen
a534e61b44 WebDriver: Implement GET /session/{id}/element/{id}/name endpoint 2022-10-22 13:44:49 +02:00
Sam Atkins
3232622255 WebDriver: Use WebDriverError::from_code() for all error creation 2022-10-21 19:59:03 +02:00
Sam Atkins
89c3e0b567 WebDriver: Rename HttpError -> WebDriverError 2022-10-21 19:59:03 +02:00
Tobias Christiansen
354a845d65 WebDriver: Implement GET /session/{id}/element/{id}/css/{name} 2022-10-20 21:26:10 +02:00
Tobias Christiansen
e87456e38f WebDriver: Implement GET /session/{id}/element/{id}/property/{name} 2022-10-19 22:30:06 +02:00
Linus Groh
6641c99c80 WebDriver: Implement GET /session/{session id}/window/handles endpoint 2022-10-19 22:23:47 +02:00
Linus Groh
6eecdb6853 WebDriver: Condense Client handler functions a bit
These comments really aren't necessary, it's clear from the code that
they forward to Session for the actual implementation.
2022-10-19 21:11:37 +02:00
Linus Groh
24ee5a2202 WebDriver: Move GET /session/{session id}/window impl into Session 2022-10-19 21:11:37 +02:00
Linus Groh
0064d2e8c8 WebDriver: Implement POST /session/{session id}/timeouts endpoint 2022-10-19 21:11:37 +02:00
Linus Groh
5c32eacac9 WebDriver: Implement GET /session/{session id}/timeouts endpoint 2022-10-19 21:11:37 +02:00
Tobias Christiansen
249350a7a3 WebDriver: Implement GET /session/{id}/element/{id}/attribute/{name} 2022-10-19 17:30:58 +02:00
Tobias Christiansen
e1fb64abad WebDriver: Implement POST /session/{id}/element/{id}/elements 2022-10-19 15:32:31 +02:00
Tobias Christiansen
d26bbcab42 WebDriver: Implement POST /session/{id}/element/{id}/element 2022-10-19 15:32:31 +02:00
Tobias Christiansen
063bd663a7 WebDriver: Implement POST /session/{id}/elements endpoint 2022-10-19 15:32:31 +02:00
Linus Groh
f3d66b1108 WebDriver: Include (empty) capabilities object in /session POST response
Still not spec compliant, but at least we now return both assumed values
of the JSON object ("sessionId", "capabilities").
2022-10-18 23:22:38 +02:00
Linus Groh
dd4e5d5028 WebDriver: Make functions always match their spec command name
This is easier to grasp than sometimes naming it after the HTTP method,
and sometimes not.
2022-10-18 23:22:38 +02:00
Linus Groh
47f25d4008 WebDriver: Add GET /session/{id}/window endpoint 2022-10-18 23:22:38 +02:00
Tobias Christiansen
5fcf00f30d WebDriver: Add POST /session/{id}/element endpoint
This allows you to query for elements in the active document!
The IDs of matching elements are returned through the WebDriver
interface, for now there's nothing to do with this information.

This introduces a `LocalElement` to the Session, which for now only
holds the ID of a real browser-side element. Once more data of elements
are available to the Session, they can be stored alongside in this
struct.

Fixme's introduced are:
    - Only CSS selector location strategy is implemented for now
    - `get_or_create_a_web_element_reference` returns the elements ID
      instead of a UUID generated in a spec way.
2022-10-18 19:18:33 +02:00