2024-02-09 08:59:56 +00:00
|
|
|
package marionette
|
2024-02-09 08:49:16 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
KeyNull = '\ue000' + iota
|
|
|
|
KeyCancel
|
|
|
|
KeyHelp
|
|
|
|
KeyBackspace
|
|
|
|
KeyTab
|
|
|
|
KeyClear
|
|
|
|
KeyReturn
|
|
|
|
KeyEnter
|
|
|
|
KeyLeftShift
|
|
|
|
KeyLeftControl
|
|
|
|
KeyLeftAlt
|
|
|
|
KeyPause
|
|
|
|
KeyEscape
|
|
|
|
KeySpace
|
|
|
|
KeyPageUp
|
|
|
|
KeyPageDown
|
|
|
|
KeyEnd // 0xE010
|
|
|
|
KeyHome
|
|
|
|
KeyArrowLeft
|
|
|
|
KeyArrowUp
|
|
|
|
KeyArrowRight
|
|
|
|
KeyArrowDown
|
|
|
|
KeyInsert
|
|
|
|
KeyDelete
|
|
|
|
KeySemicolon
|
|
|
|
KeyEquals
|
|
|
|
KeyNumpad0
|
|
|
|
KeyNumpad1
|
|
|
|
KeyNumpad2
|
|
|
|
KeyNumpad3
|
|
|
|
KeyNumpad4
|
|
|
|
KeyNumpad5
|
|
|
|
KeyNumpad6 // 0xE020
|
|
|
|
KeyNumpad7
|
|
|
|
KeyNumpad8
|
|
|
|
KeyNumpad9
|
|
|
|
KeyNumpadMultiply
|
|
|
|
KeyNumpadAdd
|
|
|
|
KeyNumpadSeparator
|
|
|
|
KeyNumpadSubtract
|
|
|
|
KeyNumpadDecimal
|
|
|
|
KeyNumpadDivide
|
|
|
|
_KeyUnusedE02A
|
|
|
|
_KeyUnusedE02B
|
|
|
|
_KeyUnusedE02C
|
|
|
|
_KeyUnusedE02D
|
|
|
|
_KeyUnusedE02E
|
|
|
|
_KeyUnusedE02F
|
|
|
|
_KeyUnusedE030 // 0xE030
|
|
|
|
KeyF1
|
|
|
|
KeyF2
|
|
|
|
KeyF3
|
|
|
|
KeyF4
|
|
|
|
KeyF5
|
|
|
|
KeyF6
|
|
|
|
KeyF7
|
|
|
|
KeyF8
|
|
|
|
KeyF9
|
|
|
|
KeyF10
|
|
|
|
KeyF11
|
|
|
|
KeyF12
|
|
|
|
KeyLeftMeta
|
|
|
|
_KeyUnusedE03E
|
|
|
|
_KeyUnusedE03F
|
|
|
|
KeyZenkakuHankaku // 0xE040
|
|
|
|
_KeyUnusedE041
|
|
|
|
_KeyUnusedE042
|
|
|
|
_KeyUnusedE043
|
|
|
|
_KeyUnusedE044
|
|
|
|
_KeyUnusedE045
|
|
|
|
_KeyUnusedE046
|
|
|
|
_KeyUnusedE047
|
|
|
|
_KeyUnusedE048
|
|
|
|
_KeyUnusedE049
|
|
|
|
_KeyUnusedE04a
|
|
|
|
_KeyUnusedE04b
|
|
|
|
_KeyUnusedE04c
|
|
|
|
_KeyUnusedE04d
|
|
|
|
_KeyUnusedE04e
|
|
|
|
_KeyUnusedE04f
|
|
|
|
KeyRightShift // 0xE050
|
|
|
|
KeyRightControl
|
|
|
|
KeyRightAlt
|
|
|
|
KeyRightMeta
|
|
|
|
KeyNumpadPageUp
|
|
|
|
KeyNumpadPageDown
|
|
|
|
KeyNumpadEnd
|
|
|
|
KeyNumpadHome
|
|
|
|
KeyNumpadLeft
|
|
|
|
KeyNumpadUp
|
|
|
|
KeyNumpadRight
|
|
|
|
KeyNumpadDown
|
|
|
|
KeyNumpadInsert
|
|
|
|
KeyNumpadDelete
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
MouseLeft = iota
|
|
|
|
MouseMiddle
|
|
|
|
MouseRight
|
|
|
|
)
|
|
|
|
|
|
|
|
type ActionsRequest struct {
|
|
|
|
Actions []ActionSequence `json:"actions"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type ActionSource string
|
|
|
|
|
|
|
|
const (
|
|
|
|
ActionSourceNone ActionSource = "none"
|
|
|
|
ActionSourceKeyboard ActionSource = "key"
|
|
|
|
ActionSourceMouse ActionSource = "pointer"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ActionSequence struct {
|
|
|
|
Type ActionSource `json:"type"`
|
|
|
|
ID string `json:"id"`
|
|
|
|
Actions []any `json:"actions"`
|
|
|
|
Parameters any `json:"parameters,omitempty"` // idk
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TCPTransport) CmdPerformActions(actions ...ActionSequence) error {
|
|
|
|
_, err := DoCommand[struct {
|
|
|
|
Value Null `json:"value"`
|
|
|
|
}](t, "WebDriver:PerformActions", ActionsRequest{
|
|
|
|
Actions: actions,
|
|
|
|
})
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TCPTransport) CmdReleaseActions() error {
|
|
|
|
_, err := DoCommand[Null](t, "WebDriver:ReleaseActions", nil)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func ActionKeyDown(key rune) any {
|
|
|
|
return map[string]any{"type": "keyDown", "value": string([]rune{key})}
|
|
|
|
}
|
|
|
|
func ActionKeyUp(key rune) any {
|
|
|
|
return map[string]any{"type": "keyUp", "value": string([]rune{key})}
|
|
|
|
}
|
|
|
|
func ActionPause(dur time.Duration) any {
|
|
|
|
return map[string]any{"type": "pause", "duration": dur.Milliseconds()}
|
|
|
|
}
|
|
|
|
func ActionPointerMove(x, y int64) any {
|
|
|
|
// nb: more optional args
|
|
|
|
return map[string]any{"type": "pointerMove", "x": x, "y": y}
|
|
|
|
}
|
|
|
|
func ActionPointerDown(button uint8) any {
|
|
|
|
return map[string]any{"type": "pointerDown", "button": button}
|
|
|
|
}
|
|
|
|
func ActionPointerUp(button uint8) any {
|
|
|
|
return map[string]any{"type": "pointerUp", "button": button}
|
|
|
|
}
|
|
|
|
func ActionScroll(x, y, deltaX, deltaY int64) any {
|
|
|
|
// nb: more optional args
|
|
|
|
return map[string]any{"type": "scroll", "x": x, "y": y, "deltaX": deltaX, "deltaY": deltaY}
|
|
|
|
}
|