Progress at getting SendKeys to send arrow keys
This commit is contained in:
parent
4f81916537
commit
6c17327b42
|
@ -23,8 +23,8 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// run task list
|
// run task list
|
||||||
var val1, val2, val3 string
|
var val1, val2, val3, val4 string
|
||||||
err = c.Run(ctxt, sendkeys(&val1, &val2, &val3))
|
err = c.Run(ctxt, sendkeys(&val1, &val2, &val3, &val4))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -44,18 +44,21 @@ func main() {
|
||||||
log.Printf("#input1 value: %s", val1)
|
log.Printf("#input1 value: %s", val1)
|
||||||
log.Printf("#textarea1 value: %s", val2)
|
log.Printf("#textarea1 value: %s", val2)
|
||||||
log.Printf("#input2 value: %s", val3)
|
log.Printf("#input2 value: %s", val3)
|
||||||
|
log.Printf("#select1 value: %s", val4)
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendkeys(val1, val2, val3 *string) cdp.Tasks {
|
func sendkeys(val1, val2, val3, val4 *string) cdp.Tasks {
|
||||||
return cdp.Tasks{
|
return cdp.Tasks{
|
||||||
cdp.Navigate("file:" + os.Getenv("GOPATH") + "/src/github.com/knq/chromedp/testdata/visible.html"),
|
cdp.Navigate("file:" + os.Getenv("GOPATH") + "/src/github.com/knq/chromedp/testdata/visible.html"),
|
||||||
cdp.WaitVisible(`#input1`, cdp.ByID),
|
cdp.WaitVisible(`#input1`, cdp.ByID),
|
||||||
cdp.WaitVisible(`#textarea1`, cdp.ByID),
|
cdp.WaitVisible(`#textarea1`, cdp.ByID),
|
||||||
cdp.SendKeys(`#textarea1`, "\b\b\n\naoeu\n\ntest1\n\nblah2\n\n\t\b\bother box!\t\ntest4", cdp.ByID),
|
cdp.SendKeys(`#textarea1`, "\b\b\n\naoeu\n\ntest1\n\nblah2\n\n\t\t\t\b\bother box!\t\ntest4", cdp.ByID),
|
||||||
cdp.Value(`#input1`, val1, cdp.ByID),
|
cdp.Value(`#input1`, val1, cdp.ByID),
|
||||||
cdp.Value(`#textarea1`, val2, cdp.ByID),
|
cdp.Value(`#textarea1`, val2, cdp.ByID),
|
||||||
cdp.SetValue(`#input2`, "test3", cdp.ByID),
|
cdp.SetValue(`#input2`, "test3", cdp.ByID),
|
||||||
cdp.Value(`#input2`, val3, cdp.ByID),
|
cdp.Value(`#input2`, val3, cdp.ByID),
|
||||||
|
cdp.SendKeys(`#select1`, cdp.KeyCodeDown+cdp.KeyCodeDown, cdp.ByID),
|
||||||
|
cdp.Value(`#select1`, val4, cdp.ByID),
|
||||||
cdp.Sleep(30 * time.Second),
|
cdp.Sleep(30 * time.Second),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
50
input.go
50
input.go
|
@ -96,11 +96,36 @@ type KeyAction struct {
|
||||||
opts []KeyOption
|
opts []KeyOption
|
||||||
}
|
}
|
||||||
|
|
||||||
var keyNames = map[rune]string{
|
// KeyCode are known system key codes.
|
||||||
'\b': "Backspace",
|
type KeyCode string
|
||||||
'\t': "Tab",
|
|
||||||
'\r': "Enter",
|
// KeyCode values.
|
||||||
'\n': "Enter",
|
const (
|
||||||
|
KeyCodeBackspace = "\b"
|
||||||
|
KeyCodeTab = "\t"
|
||||||
|
KeyCodeCR = "\r"
|
||||||
|
KeyCodeLF = "\n"
|
||||||
|
KeyCodeLeft = "\x25"
|
||||||
|
KeyCodeUp = "\x26"
|
||||||
|
KeyCodeRight = "\x27"
|
||||||
|
KeyCodeDown = "\x28"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
keyRuneCR = '\r'
|
||||||
|
)
|
||||||
|
|
||||||
|
// keyCodeNames is the map of key code values to their respective named
|
||||||
|
// identifiers.
|
||||||
|
var keyCodeNames = map[KeyCode]string{
|
||||||
|
KeyCodeBackspace: "Backspace",
|
||||||
|
KeyCodeTab: "Tab",
|
||||||
|
KeyCodeCR: "Enter",
|
||||||
|
KeyCodeLF: "Enter",
|
||||||
|
KeyCodeLeft: "Left",
|
||||||
|
KeyCodeUp: "Up",
|
||||||
|
KeyCodeRight: "Right",
|
||||||
|
KeyCodeDown: "Down",
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do satisfies Action interface.
|
// Do satisfies Action interface.
|
||||||
|
@ -117,18 +142,19 @@ func (ka *KeyAction) Do(ctxt context.Context, h cdp.FrameHandler) error {
|
||||||
|
|
||||||
for _, r := range ka.v {
|
for _, r := range ka.v {
|
||||||
s := string(r)
|
s := string(r)
|
||||||
if n, ok := keyNames[r]; ok {
|
keyS := KeyCode(r)
|
||||||
|
if n, ok := keyCodeNames[keyS]; ok {
|
||||||
kc := int64(r)
|
kc := int64(r)
|
||||||
if r == '\n' {
|
if keyS == KeyCodeLF {
|
||||||
s = string('\r')
|
s = string(keyRuneCR)
|
||||||
kc = int64('\r')
|
kc = int64(keyRuneCR)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sysP.WithKey(n).
|
err = sysP.WithKey(n).
|
||||||
WithNativeVirtualKeyCode(kc).
|
WithNativeVirtualKeyCode(kc).
|
||||||
WithWindowsVirtualKeyCode(kc).
|
WithWindowsVirtualKeyCode(kc).
|
||||||
WithUnmodifiedText(s).
|
WithKeyIdentifier(s).
|
||||||
WithText(s).
|
WithIsSystemKey(true).
|
||||||
Do(ctxt, h)
|
Do(ctxt, h)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -141,7 +167,7 @@ func (ka *KeyAction) Do(ctxt context.Context, h cdp.FrameHandler) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME
|
// FIXME
|
||||||
time.Sleep(5 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
6
testdata/visible.html
vendored
6
testdata/visible.html
vendored
|
@ -16,6 +16,12 @@
|
||||||
<input id="input1" value="some value"><br><br>
|
<input id="input1" value="some value"><br><br>
|
||||||
<textarea id="textarea1" style="width:500px;height:400px">textarea</textarea><br><br>
|
<textarea id="textarea1" style="width:500px;height:400px">textarea</textarea><br><br>
|
||||||
<input id="input2" type="submit" value="Next">
|
<input id="input2" type="submit" value="Next">
|
||||||
|
<select id="select1">
|
||||||
|
<option value="one">1</option>
|
||||||
|
<option value="two">2</option>
|
||||||
|
<option value="three">3</option>
|
||||||
|
<option value="four">4</option>
|
||||||
|
</select>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user