forked from sclevine/agouti
/
device.go
84 lines (69 loc) · 1.81 KB
/
device.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package appium
import (
"fmt"
"github.com/sclevine/agouti"
"github.com/sclevine/agouti/api/mobile"
"github.com/sclevine/agouti/internal/element"
)
type mobileSession interface {
element.Client
LaunchApp() error
CloseApp() error
InstallApp(appPath string) error
Reset() error
PerformTouch(actions []mobile.Action) error
ReplaceValue(elementID, newValue string) error
}
type Device struct {
*agouti.Page
session mobileSession
}
func newDevice(session mobileSession, page *agouti.Page) *Device {
return &Device{
Page: page,
session: session,
}
}
// Device methods
func (d *Device) LaunchApp() error {
if err := d.session.LaunchApp(); err != nil {
return fmt.Errorf("failed to launch app: %s", err)
}
return nil
}
func (d *Device) CloseApp() error {
if err := d.session.CloseApp(); err != nil {
return fmt.Errorf("failed to close app: %s", err)
}
return nil
}
func (d *Device) InstallApp(appPath string) error {
if err := d.session.InstallApp(appPath); err != nil {
return fmt.Errorf("failed to install app: %s", err)
}
return nil
}
func (d *Device) Reset() error {
if err := d.session.Reset(); err != nil {
return fmt.Errorf("failed to reset app: %s", err)
}
return nil
}
func (d *Device) TouchAction() *TouchAction {
return NewTouchAction(d.session)
}
func (d *Device) ReplaceElementValue(element *agouti.Selection, newValue string) error {
elements, err := element.Elements()
if err != nil {
return err
}
for _, el := range elements {
if err := d.session.ReplaceValue(el.GetID(), newValue); err != nil {
return fmt.Errorf("failed to replace element value: %s", err)
}
}
return nil
}
func (d *Device) Swipe(start_x, start_y, end_x, end_y, duration int) error {
return d.TouchAction().PressPosition(start_x, start_y).Wait(duration).MoveToPosition(end_x, end_y).Release().Perform()
}