mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
* proto(driver): drop launcher_activity from LaunchRequest * refactor(driver): rename Driver to DeviceDriver, drop launcherActivity from Launch * refactor(driver): rename package maestro to sidecar * feat(driver): add ChromeDriver backed by chromedp * feat(hierarchy): replace XML parser with TreeNode JSON parser * refactor(driver): update mock and runner to DeviceDriver, drop launcherActivity * feat(runner): add platform routing for web vs sidecar * test(verifier): update hierarchy fixtures from XML to TreeNode JSON * feat(sidecar): extract readLogcat/readProcMetrics; add MaestroDriverBackend - Extract readLogcat() and readProcMetrics() as internal package-level helpers parameterised by serial - Add MaestroDriverBackend wiring maestro-client AndroidDriver - Drop launcherActivity from DriverBackend interface and StubDriverBackend - Add maestro-utils and micrometer-core as explicit compile deps * refactor(sidecar): inject DriverBackend into DriverService; drop launcherActivity - Remove serial and default backend from DriverService constructor - Make backend a required parameter - Drop launcherActivity from launch RPC handler - Create MaestroDriverBackend in Main.kt when platform is android * test(sidecar): update tests for dropped launcherActivity and required backend * chore(sidecar): remove unnecessary micrometer-core direct dependency
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package driver
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// DeviceDriver abstracts the platform-specific UI automation backend. v0.1
|
|
// surface matches proto/driverpb/driver.proto. The sidecar implementation
|
|
// lives under driver/sidecar; the web implementation under driver/chrome;
|
|
// tests use driver/mock.
|
|
type DeviceDriver interface {
|
|
Launch(ctx context.Context, bundleID string, clearState bool) error
|
|
Terminate(ctx context.Context) error
|
|
|
|
Tap(ctx context.Context, x, y int) error
|
|
TapSelector(ctx context.Context, selector string) error
|
|
InputText(ctx context.Context, text string) error
|
|
Swipe(ctx context.Context, fromX, fromY, toX, toY int, duration time.Duration) error
|
|
PressKey(ctx context.Context, key string) error
|
|
|
|
Hierarchy(ctx context.Context) (string, error)
|
|
Screenshot(ctx context.Context) (Image, error)
|
|
// RecentLogs returns log entries at or after `since`, filtered to
|
|
// `minLevel` or above. An empty minLevel defaults to "E".
|
|
RecentLogs(ctx context.Context, since time.Time, minLevel string) ([]LogEntry, error)
|
|
|
|
WaitForIdle(ctx context.Context, duration time.Duration) error
|
|
Health(ctx context.Context) (Health, error)
|
|
// Metrics samples the app's CPU and memory at the time of the call.
|
|
// CPUPercent is percent of a single core (multi-core apps can exceed
|
|
// 100). HeapBytes is resident set size; TotalMemoryBytes includes
|
|
// native allocations.
|
|
Metrics(ctx context.Context, bundleID string) (Metrics, error)
|
|
}
|
|
|
|
type LogEntry struct {
|
|
UnixMillis int64
|
|
Level string
|
|
Tag string
|
|
Message string
|
|
}
|
|
|
|
type Image struct {
|
|
PNG []byte
|
|
Width int
|
|
Height int
|
|
}
|
|
|
|
type Health struct {
|
|
Ready bool
|
|
Version string
|
|
Platform string
|
|
}
|
|
|
|
type Metrics struct {
|
|
CPUPercent float64
|
|
HeapBytes int64
|
|
TotalMemoryBytes int64
|
|
}
|