Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ce34bf2
feat: add currentDisplayId setting for screenshots
jsteinberg7 Sep 25, 2026
d8cf1b8
chore: remove boolean check from currentDisplayId validation
jsteinberg7 Sep 25, 2026
35d9e85
feat: target the currentDisplayId display with W3C actions
jsteinberg7 Sep 25, 2026
4f152bc
fix: validate display settings and report available ids
jsteinberg7 Sep 28, 2026
5505557
Merge branch 'feat/current-display-id' into feat/current-display-id-a…
jsteinberg7 Sep 28, 2026
e1b1bda
test: fix available-display assertion syntax
jsteinberg7 Sep 28, 2026
05636fb
refactor: clarify the display coordinate correction
jsteinberg7 Sep 28, 2026
1070044
Merge branch 'feat/current-display-id' into feat/current-display-id-a…
jsteinberg7 Sep 28, 2026
3eb77b9
Merge branch 'master' into feat/current-display-id-actions
KazuCocoa Sep 30, 2026
1dce81f
feat: support Duo hinge control and secondary display capture
KazuCocoa Oct 3, 2026
c3f54e2
Merge #1269 as the basis for Duo display gestures
KazuCocoa Oct 3, 2026
16a38f3
fix: align element actions and scrolling on secondary displays
KazuCocoa Oct 3, 2026
85dd686
remove simulator only logic, temporary implementation
KazuCocoa Oct 3, 2026
db7aa9a
add get
KazuCocoa Oct 3, 2026
f0b1617
refactor a bit
KazuCocoa Oct 3, 2026
b320215
refactor: separate hinge capabilities and delegate screen lookup
KazuCocoa Oct 3, 2026
91baed9
fix: guard display APIs for older XCTest versions
KazuCocoa Oct 3, 2026
b655bf2
refactor: name hinge timeout and document runtime loading
KazuCocoa Oct 3, 2026
44ab7ce
docs: explain why hinge events bypass the existing HID helper
KazuCocoa Oct 3, 2026
feeb4d1
revert unnecessary chnages in the readme
KazuCocoa Oct 3, 2026
540e774
Merge branch 'fix/duo-display-app-detection' into fix/duo-display-ges…
KazuCocoa Oct 3, 2026
4c69596
refactor: unify display checks and scroll geometry
KazuCocoa Oct 3, 2026
858e143
Merge branch 'master' into fix/duo-display-gestures
KazuCocoa Oct 4, 2026
0045f94
Merge branch 'master' into fix/duo-display-gestures
KazuCocoa Oct 6, 2026
ecb650b
fix: guard scrolling orientation APIs on watchOS (#1294)
KazuCocoa Oct 6, 2026
86ae3a1
fix: preserve display-independent actions and correct landscape scrol…
KazuCocoa Oct 6, 2026
451fe29
refactor: clarify display validation and action synthesis stages
KazuCocoa Oct 6, 2026
947cc2a
test: preserve shared alert fixture in display-independent action test
KazuCocoa Oct 6, 2026
5ed90c8
fix: anchor native Duo coordinates to application windows (#1292)
KazuCocoa Oct 7, 2026
8045b49
Merge branch 'master' into fix/duo-display-gestures
KazuCocoa Oct 7, 2026
1b82530
docs: document legacy SDK coordinate limitations on Duo
KazuCocoa Oct 7, 2026
56a9dd5
test: wait for rotated gesture fixture geometry to settle
KazuCocoa Oct 7, 2026
44cfddc
docs: record verified Duo simulator capture and layout limitations
KazuCocoa Oct 7, 2026
c0765ed
fix: normalize portrait geometry for landscape-native screens
KazuCocoa Oct 7, 2026
5f4fa77
fix: align application origins on secondary displays
KazuCocoa Oct 7, 2026
1f944b5
fix: preserve native gesture edge coordinates
KazuCocoa Oct 7, 2026
5898cb6
shorten
KazuCocoa Oct 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
WebDriverAgent is a [WebDriver server](https://w3c.github.io/webdriver/webdriver-spec.html) implementation for iOS that can be used to remote control iOS devices. It allows you to launch & kill applications, tap & scroll views or confirm view presence on a screen. This makes it a perfect tool for application end-to-end testing or general purpose device automation. It works by linking `XCTest.framework` and calling Apple's API to execute commands directly on a device. WebDriverAgent is developed for end-to-end testing and is successfully adopted by [Appium](http://appium.io) via [XCUITest driver](https://github.com/appium/appium-xcuitest-driver).

## Features
* Both iOS and tvOS platforms are supported with devices & simulators
* Implements most of [WebDriver Spec](https://w3c.github.io/webdriver/webdriver-spec.html)
* Implements part of [Mobile JSON Wire Protocol Spec](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md)
* USB support for devices is implemented via [appium-ios-device](https://github.com/appium/appium-ios-device) library and has zero dependencies on third-party tools.
* Easy development cycle as it can be launched & debugged directly via Xcode
* Use [Mac2Driver](https://github.com/appium/appium-mac2-driver) to automate macOS apps
* Both iOS and tvOS platforms are supported with devices & simulators
* Implements most of [WebDriver Spec](https://w3c.github.io/webdriver/webdriver-spec.html)
* Implements part of [Mobile JSON Wire Protocol Spec](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md)
* USB support for devices is implemented via [appium-ios-device](https://github.com/appium/appium-ios-device) library and has zero dependencies on third-party tools.
* Easy development cycle as it can be launched & debugged directly via Xcode
* Use [Mac2Driver](https://github.com/appium/appium-mac2-driver) to automate macOS apps

## Getting Started On This Repository

Expand All @@ -35,20 +35,21 @@ See [Hinge angle](docs/hinge-angle.md) for reading angles, sending simulated hin
events, runtime requirements, and physical-device testing feedback.

## Known Issues

If you are having some issues please checkout [wiki](https://github.com/facebook/WebDriverAgent/wiki/Common-Issues) first.

## For Contributors

If you want to help us out, you are more than welcome to. However please make sure you have followed the guidelines in [CONTRIBUTING](CONTRIBUTING.md).

## Creating Bundles

`npm run bundle`

Then, you find `WebDriverAgentRunner-Runner-sim-<version>.zip` for iOS and `WebDriverAgentRunner-Runner-tv_sim-<version>.zip` for tvOS files in the current directory.
Then, you find `WebDriverAgentRunner-Runner-sim-<version>.zip` for iOS and `WebDriverAgentRunner-Runner-tv_sim-<version>.zip` for tvOS files in the current directory.

## License

[`WebDriverAgent` is BSD-licensed](LICENSE).


Have fun!
4 changes: 4 additions & 0 deletions WebDriverAgent.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,7 @@
715AFAC11FFA29180053896D /* FBScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 715AFABF1FFA29180053896D /* FBScreen.h */; };
715AFAC21FFA29180053896D /* FBScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 715AFAC01FFA29180053896D /* FBScreen.m */; };
715AFAC41FFA2AAF0053896D /* FBScreenTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 715AFAC31FFA2AAF0053896D /* FBScreenTests.m */; };
8EB95DF348A9438BBEAB4501 /* FBDisplayGestureTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB95DF348A9438BBEAB4502 /* FBDisplayGestureTests.m */; };
715D554B2229891B00524509 /* FBExceptionHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 715D554A2229891B00524509 /* FBExceptionHandlerTests.m */; };
715D5773224DE02E00DA2D99 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 716C9345224D540C004B8542 /* libxml2.tbd */; };
715D5774224DE05400DA2D99 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 716C9345224D540C004B8542 /* libxml2.tbd */; };
Expand Down Expand Up @@ -1627,6 +1628,7 @@
715AFABF1FFA29180053896D /* FBScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBScreen.h; sourceTree = "<group>"; };
715AFAC01FFA29180053896D /* FBScreen.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBScreen.m; sourceTree = "<group>"; };
715AFAC31FFA2AAF0053896D /* FBScreenTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBScreenTests.m; sourceTree = "<group>"; };
8EB95DF348A9438BBEAB4502 /* FBDisplayGestureTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBDisplayGestureTests.m; sourceTree = "<group>"; };
715D554A2229891B00524509 /* FBExceptionHandlerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBExceptionHandlerTests.m; sourceTree = "<group>"; };
71649EC82518C19C0087F212 /* IOSTestSettings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = IOSTestSettings.xcconfig; sourceTree = "<group>"; };
716C9342224D53A1004B8542 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/AppleTVOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
Expand Down Expand Up @@ -2704,6 +2706,7 @@
7119E1EB1E891F8600D0B125 /* FBPickerWheelSelectTests.m */,
71ACF5B7242F2FDC00F0AAD4 /* FBSafariAlertTests.m */,
715AFAC31FFA2AAF0053896D /* FBScreenTests.m */,
8EB95DF348A9438BBEAB4502 /* FBDisplayGestureTests.m */,
EE55B3261D1D54CF003AAAEC /* FBScrollingTests.m */,
7152EB2F1F41F9960047EEFF /* FBSessionIntegrationTests.m */,
EE26409A1D0EB5E8009BE6B0 /* FBTapTest.m */,
Expand Down Expand Up @@ -4861,6 +4864,7 @@
719CD8FF2126C90200C7D0C2 /* FBAutoAlertsHandlerTests.m in Sources */,
EE2202131ECC612200A29571 /* FBIntegrationTestCase.m in Sources */,
715AFAC41FFA2AAF0053896D /* FBScreenTests.m in Sources */,
8EB95DF348A9438BBEAB4501 /* FBDisplayGestureTests.m in Sources */,
71BB58EC2B96328700CB9BFE /* FBScreenRecordingRequest.m in Sources */,
EE22021E1ECC618900A29571 /* FBTapTest.m in Sources */,
71930C472066434000D3AFEC /* FBPasteboardTests.m in Sources */,
Expand Down
Loading
Loading