You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While this project is in early stage I thought it might be a good idea to discuss overall architecture and choose an approach for further development.
The project consists of two major components:
The Driver, that runs on the host system and is responsible for managing emulators/devices, app under test deployment and staff like that.
The automation Agent, that runs on the emulator/device and is responsible for actual automation of app under test.
I see three general approaches in building communication between these two components:
Driver
⇄
Agent
Notes
1
Server (JSWP)
→
Server (RPC)
Currently used in Winium projects.
2
Server (JSWP)
↔
Client (WebSockets)
Agent has to connect to special endpoint on Driver. Driver uses two-way communications.
3
Server (JSWP Proxy)
→
Server (JSWP)
Similar to the first option, but agent implements full JSWP protocol. See facebook/WebDriverAgent
Here are some thoughts on each option.
1. Server (JSWP) → Server (RPC)
Does not require implementing JSWP compatibility on both ends (Driver and Agent)
Used in other Winium projects, appium-android-bootstrap
Agent cannot be used without Driver directly from Selenium tests
Agent is a server, i.e. requires a port to be bound to (ports are forwarded to host, complicating simultaneous run of multiple agents on multiple emulators on same host), etc.
But we can use non-network RPC, for exapmle file based RPC if it is possible in cases of Agent (it is possible in Winium.StoreApps, where Agent is a part of the app under test)
2. Server (JSWP) ↔ Client (WebSockets)
Does not require implementing JSWP compatibility on both ends (Driver and Agent)
Does not require port to be bound to
Two-way communications, which might be used for example for some extended functionality in inspector
Agent cannot be used without Driver directly from Selenium tests
3. Server (JSWP Proxy) → Server (JSWP)
Agent can be used directly without host Driver (except for deployment of agent, which can be done once (if it is stable enough))
Kinda inevitable good separation of concerns: we have JSWP compatibly agent that can be used directly, we have emulator/devices management tool (similar to facebook/FBSimulatorControl), and simple JSWP proxy that overrides NewSession and a couple of other commands.
Agent is a server, i.e. requires a port to be bound to (ports are forwarded to host, complicating simultaneous run of multiple agents on multiple emulators on same host), etc.
Requires implementing JSWP compatibility on both sides
The text was updated successfully, but these errors were encountered:
While this project is in early stage I thought it might be a good idea to discuss overall architecture and choose an approach for further development.
The project consists of two major components:
Driver
, that runs on the host system and is responsible for managing emulators/devices, app under test deployment and staff like that.Agent
, that runs on the emulator/device and is responsible for actual automation of app under test.I see three general approaches in building communication between these two components:
Here are some thoughts on each option.
1. Server (JSWP) → Server (RPC)
2. Server (JSWP) ↔ Client (WebSockets)
3. Server (JSWP Proxy) → Server (JSWP)
NewSession
and a couple of other commands.The text was updated successfully, but these errors were encountered: