Skip to content

Commit 1780b8c

Browse files
authored
Added support for Element.selected API (#174)
1 parent 3e3f823 commit 1780b8c

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

Docs/SupportedAPIs.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Contributions to expand support to unimplemented functionality are always welcom
3333
| GET | `/session/:sessionId/element/:id/location_in_view` | Supported | Not implemented |
3434
| GET | `/session/:sessionId/element/:id/name` | Supported | Not implemented |
3535
| GET | `/session/:sessionId/element/:id/screenshot` | Supported | Not implemented |
36-
| GET | `/session/:sessionId/element/:id/selected` | Supported | Not implemented |
36+
| GET | `/session/:sessionId/element/:id/selected` | Supported | `Element.selected` |
3737
| GET | `/session/:sessionId/element/:id/size` | Supported | `Element.size` |
3838
| GET | `/session/:sessionId/element/:id/text` | Supported | `Element.text` |
3939
| POST | `/session/:sessionId/element/:id/value` | Supported | `Element.sendKeys()`|

Sources/WebDriver/Element.swift

+8
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ public struct Element {
5353
}
5454
}
5555

56+
/// Gets a value indicating whether this element is currently selected.
57+
public var selected: Bool {
58+
get throws {
59+
try webDriver.send(Requests.ElementSelected(
60+
session: session.id, element: id)).value
61+
}
62+
}
63+
5664
/// Clicks this element.
5765
public func click(retryTimeout: TimeInterval? = nil) throws {
5866
let request = Requests.ElementClick(session: session.id, element: id)

Sources/WebDriver/Requests.swift

+12
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ public enum Requests {
9191
}
9292
}
9393

94+
public struct ElementSelected: Request {
95+
public var session: String
96+
public var element: String
97+
98+
public var pathComponents: [String] { ["session", session, "element", element, "selected"] }
99+
public var method: HTTPMethod { .get }
100+
101+
public struct Response: Codable {
102+
public var value: Bool
103+
}
104+
}
105+
94106
// https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidelementidvalue
95107
public struct ElementValue: Request {
96108
public var session: String

Tests/UnitTests/APIToRequestMappingTests.swift

+10
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,16 @@ class APIToRequestMappingTests: XCTestCase {
190190
XCTAssert(try element.enabled == true)
191191
}
192192

193+
func testElementSelected() throws {
194+
let mockWebDriver = MockWebDriver()
195+
let session = Session(webDriver: mockWebDriver, existingId: "mySession")
196+
let element = Element(session: session, id: "myElement")
197+
mockWebDriver.expect(path: "session/mySession/element/myElement/selected", method: .get) {
198+
ResponseWithValue(true)
199+
}
200+
XCTAssert(try element.selected == true)
201+
}
202+
193203
func testWindowPosition() throws {
194204
let mockWebDriver: MockWebDriver = MockWebDriver()
195205
let session = Session(webDriver: mockWebDriver, existingId: "mySession")

0 commit comments

Comments
 (0)