From 2d46c88024416d53cdfdcdff089392456ec48560 Mon Sep 17 00:00:00 2001 From: Kenneth Shaw Date: Fri, 14 Jul 2017 10:29:52 +0700 Subject: [PATCH] Updating to latest protocol.json --- cdp/dom/dom.go | 88 ++++++++++++++++++++++------ cdp/dom/easyjson.go | 102 +++++++++++++++++++++++++++------ cdp/domsnapshot/easyjson.go | 40 +++++++++++++ cdp/domsnapshot/types.go | 4 ++ cmd/chromedp-gen/protocol.json | 77 ++++++++++++++++++++++--- input.go | 4 +- query.go | 10 ++-- sel.go | 4 +- 8 files changed, 277 insertions(+), 52 deletions(-) diff --git a/cdp/dom/dom.go b/cdp/dom/dom.go index 441228d..146661d 100644 --- a/cdp/dom/dom.go +++ b/cdp/dom/dom.go @@ -1037,17 +1037,34 @@ func (p *MarkUndoableStateParams) Do(ctxt context.Context, h cdp.Handler) (err e // FocusParams focuses the given element. type FocusParams struct { - NodeID cdp.NodeID `json:"nodeId"` // Id of the node to focus. + NodeID cdp.NodeID `json:"nodeId,omitempty"` // Identifier of the node. + BackendNodeID cdp.BackendNodeID `json:"backendNodeId,omitempty"` // Identifier of the backend node. + ObjectID runtime.RemoteObjectID `json:"objectId,omitempty"` // JavaScript object id of the node wrapper. } // Focus focuses the given element. // // parameters: -// nodeID - Id of the node to focus. -func Focus(nodeID cdp.NodeID) *FocusParams { - return &FocusParams{ - NodeID: nodeID, - } +func Focus() *FocusParams { + return &FocusParams{} +} + +// WithNodeID identifier of the node. +func (p FocusParams) WithNodeID(nodeID cdp.NodeID) *FocusParams { + p.NodeID = nodeID + return &p +} + +// WithBackendNodeID identifier of the backend node. +func (p FocusParams) WithBackendNodeID(backendNodeID cdp.BackendNodeID) *FocusParams { + p.BackendNodeID = backendNodeID + return &p +} + +// WithObjectID javaScript object id of the node wrapper. +func (p FocusParams) WithObjectID(objectID runtime.RemoteObjectID) *FocusParams { + p.ObjectID = objectID + return &p } // Do executes DOM.focus against the provided context and @@ -1058,22 +1075,40 @@ func (p *FocusParams) Do(ctxt context.Context, h cdp.Handler) (err error) { // SetFileInputFilesParams sets files for the given file input element. type SetFileInputFilesParams struct { - NodeID cdp.NodeID `json:"nodeId"` // Id of the file input node to set files for. - Files []string `json:"files"` // Array of file paths to set. + Files []string `json:"files"` // Array of file paths to set. + NodeID cdp.NodeID `json:"nodeId,omitempty"` // Identifier of the node. + BackendNodeID cdp.BackendNodeID `json:"backendNodeId,omitempty"` // Identifier of the backend node. + ObjectID runtime.RemoteObjectID `json:"objectId,omitempty"` // JavaScript object id of the node wrapper. } // SetFileInputFiles sets files for the given file input element. // // parameters: -// nodeID - Id of the file input node to set files for. // files - Array of file paths to set. -func SetFileInputFiles(nodeID cdp.NodeID, files []string) *SetFileInputFilesParams { +func SetFileInputFiles(files []string) *SetFileInputFilesParams { return &SetFileInputFilesParams{ - NodeID: nodeID, - Files: files, + Files: files, } } +// WithNodeID identifier of the node. +func (p SetFileInputFilesParams) WithNodeID(nodeID cdp.NodeID) *SetFileInputFilesParams { + p.NodeID = nodeID + return &p +} + +// WithBackendNodeID identifier of the backend node. +func (p SetFileInputFilesParams) WithBackendNodeID(backendNodeID cdp.BackendNodeID) *SetFileInputFilesParams { + p.BackendNodeID = backendNodeID + return &p +} + +// WithObjectID javaScript object id of the node wrapper. +func (p SetFileInputFilesParams) WithObjectID(objectID runtime.RemoteObjectID) *SetFileInputFilesParams { + p.ObjectID = objectID + return &p +} + // Do executes DOM.setFileInputFiles against the provided context and // target handler. func (p *SetFileInputFilesParams) Do(ctxt context.Context, h cdp.Handler) (err error) { @@ -1082,17 +1117,34 @@ func (p *SetFileInputFilesParams) Do(ctxt context.Context, h cdp.Handler) (err e // GetBoxModelParams returns boxes for the currently selected nodes. type GetBoxModelParams struct { - NodeID cdp.NodeID `json:"nodeId"` // Id of the node to get box model for. + NodeID cdp.NodeID `json:"nodeId,omitempty"` // Identifier of the node. + BackendNodeID cdp.BackendNodeID `json:"backendNodeId,omitempty"` // Identifier of the backend node. + ObjectID runtime.RemoteObjectID `json:"objectId,omitempty"` // JavaScript object id of the node wrapper. } // GetBoxModel returns boxes for the currently selected nodes. // // parameters: -// nodeID - Id of the node to get box model for. -func GetBoxModel(nodeID cdp.NodeID) *GetBoxModelParams { - return &GetBoxModelParams{ - NodeID: nodeID, - } +func GetBoxModel() *GetBoxModelParams { + return &GetBoxModelParams{} +} + +// WithNodeID identifier of the node. +func (p GetBoxModelParams) WithNodeID(nodeID cdp.NodeID) *GetBoxModelParams { + p.NodeID = nodeID + return &p +} + +// WithBackendNodeID identifier of the backend node. +func (p GetBoxModelParams) WithBackendNodeID(backendNodeID cdp.BackendNodeID) *GetBoxModelParams { + p.BackendNodeID = backendNodeID + return &p +} + +// WithObjectID javaScript object id of the node wrapper. +func (p GetBoxModelParams) WithObjectID(objectID runtime.RemoteObjectID) *GetBoxModelParams { + p.ObjectID = objectID + return &p } // GetBoxModelReturns return values. diff --git a/cdp/dom/easyjson.go b/cdp/dom/easyjson.go index 289b40a..04c57f2 100644 --- a/cdp/dom/easyjson.go +++ b/cdp/dom/easyjson.go @@ -637,8 +637,6 @@ func easyjsonC5a4559bDecodeGithubComKnqChromedpCdpDom7(in *jlexer.Lexer, out *Se continue } switch key { - case "nodeId": - (out.NodeID).UnmarshalEasyJSON(in) case "files": if in.IsNull() { in.Skip() @@ -662,6 +660,12 @@ func easyjsonC5a4559bDecodeGithubComKnqChromedpCdpDom7(in *jlexer.Lexer, out *Se } in.Delim(']') } + case "nodeId": + (out.NodeID).UnmarshalEasyJSON(in) + case "backendNodeId": + (out.BackendNodeID).UnmarshalEasyJSON(in) + case "objectId": + out.ObjectID = runtime.RemoteObjectID(in.String()) default: in.SkipRecursive() } @@ -680,12 +684,6 @@ func easyjsonC5a4559bEncodeGithubComKnqChromedpCdpDom7(out *jwriter.Writer, in S out.RawByte(',') } first = false - out.RawString("\"nodeId\":") - out.Int64(int64(in.NodeID)) - if !first { - out.RawByte(',') - } - first = false out.RawString("\"files\":") if in.Files == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { out.RawString("null") @@ -699,6 +697,30 @@ func easyjsonC5a4559bEncodeGithubComKnqChromedpCdpDom7(out *jwriter.Writer, in S } out.RawByte(']') } + if in.NodeID != 0 { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"nodeId\":") + out.Int64(int64(in.NodeID)) + } + if in.BackendNodeID != 0 { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"backendNodeId\":") + out.Int64(int64(in.BackendNodeID)) + } + if in.ObjectID != "" { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"objectId\":") + out.String(string(in.ObjectID)) + } out.RawByte('}') } @@ -3667,6 +3689,10 @@ func easyjsonC5a4559bDecodeGithubComKnqChromedpCdpDom45(in *jlexer.Lexer, out *G switch key { case "nodeId": (out.NodeID).UnmarshalEasyJSON(in) + case "backendNodeId": + (out.BackendNodeID).UnmarshalEasyJSON(in) + case "objectId": + out.ObjectID = runtime.RemoteObjectID(in.String()) default: in.SkipRecursive() } @@ -3681,12 +3707,30 @@ func easyjsonC5a4559bEncodeGithubComKnqChromedpCdpDom45(out *jwriter.Writer, in out.RawByte('{') first := true _ = first - if !first { - out.RawByte(',') + if in.NodeID != 0 { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"nodeId\":") + out.Int64(int64(in.NodeID)) + } + if in.BackendNodeID != 0 { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"backendNodeId\":") + out.Int64(int64(in.BackendNodeID)) + } + if in.ObjectID != "" { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"objectId\":") + out.String(string(in.ObjectID)) } - first = false - out.RawString("\"nodeId\":") - out.Int64(int64(in.NodeID)) out.RawByte('}') } @@ -3902,6 +3946,10 @@ func easyjsonC5a4559bDecodeGithubComKnqChromedpCdpDom48(in *jlexer.Lexer, out *F switch key { case "nodeId": (out.NodeID).UnmarshalEasyJSON(in) + case "backendNodeId": + (out.BackendNodeID).UnmarshalEasyJSON(in) + case "objectId": + out.ObjectID = runtime.RemoteObjectID(in.String()) default: in.SkipRecursive() } @@ -3916,12 +3964,30 @@ func easyjsonC5a4559bEncodeGithubComKnqChromedpCdpDom48(out *jwriter.Writer, in out.RawByte('{') first := true _ = first - if !first { - out.RawByte(',') + if in.NodeID != 0 { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"nodeId\":") + out.Int64(int64(in.NodeID)) + } + if in.BackendNodeID != 0 { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"backendNodeId\":") + out.Int64(int64(in.BackendNodeID)) + } + if in.ObjectID != "" { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"objectId\":") + out.String(string(in.ObjectID)) } - first = false - out.RawString("\"nodeId\":") - out.Int64(int64(in.NodeID)) out.RawByte('}') } diff --git a/cdp/domsnapshot/easyjson.go b/cdp/domsnapshot/easyjson.go index 0e1de15..0510715 100644 --- a/cdp/domsnapshot/easyjson.go +++ b/cdp/domsnapshot/easyjson.go @@ -600,6 +600,14 @@ func easyjsonC5a4559bDecodeGithubComKnqChromedpCdpDomsnapshot4(in *jlexer.Lexer, out.NodeName = string(in.String()) case "nodeValue": out.NodeValue = string(in.String()) + case "textValue": + out.TextValue = string(in.String()) + case "inputValue": + out.InputValue = string(in.String()) + case "inputChecked": + out.InputChecked = bool(in.Bool()) + case "optionSelected": + out.OptionSelected = bool(in.Bool()) case "backendNodeId": (out.BackendNodeID).UnmarshalEasyJSON(in) case "childNodeIndexes": @@ -735,6 +743,38 @@ func easyjsonC5a4559bEncodeGithubComKnqChromedpCdpDomsnapshot4(out *jwriter.Writ first = false out.RawString("\"nodeValue\":") out.String(string(in.NodeValue)) + if in.TextValue != "" { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"textValue\":") + out.String(string(in.TextValue)) + } + if in.InputValue != "" { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"inputValue\":") + out.String(string(in.InputValue)) + } + if in.InputChecked { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"inputChecked\":") + out.Bool(bool(in.InputChecked)) + } + if in.OptionSelected { + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"optionSelected\":") + out.Bool(bool(in.OptionSelected)) + } if !first { out.RawByte(',') } diff --git a/cdp/domsnapshot/types.go b/cdp/domsnapshot/types.go index cfde0e4..ff2eb1d 100644 --- a/cdp/domsnapshot/types.go +++ b/cdp/domsnapshot/types.go @@ -13,6 +13,10 @@ type DOMNode struct { NodeType cdp.NodeType `json:"nodeType"` // Node's nodeType. NodeName string `json:"nodeName"` // Node's nodeName. NodeValue string `json:"nodeValue"` // Node's nodeValue. + TextValue string `json:"textValue,omitempty"` // Only set for textarea elements, contains the text value. + InputValue string `json:"inputValue,omitempty"` // Only set for input elements, contains the input's associated text value. + InputChecked bool `json:"inputChecked,omitempty"` // Only set for radio and checkbox input elements, indicates if the element has been checked + OptionSelected bool `json:"optionSelected,omitempty"` // Only set for option elements, indicates if the element has been selected BackendNodeID cdp.BackendNodeID `json:"backendNodeId"` // Node's id, corresponds to DOM.Node.backendNodeId. ChildNodeIndexes []int64 `json:"childNodeIndexes,omitempty"` // The indexes of the node's child nodes in the domNodes array returned by getSnapshot, if any. Attributes []*NameValue `json:"attributes,omitempty"` // Attributes of an Element node. diff --git a/cmd/chromedp-gen/protocol.json b/cmd/chromedp-gen/protocol.json index ade937e..ab5ce68 100644 --- a/cmd/chromedp-gen/protocol.json +++ b/cmd/chromedp-gen/protocol.json @@ -6016,7 +6016,20 @@ { "name": "nodeId", "$ref": "NodeId", - "description": "Id of the node to focus." + "optional": true, + "description": "Identifier of the node." + }, + { + "name": "backendNodeId", + "$ref": "BackendNodeId", + "optional": true, + "description": "Identifier of the backend node." + }, + { + "name": "objectId", + "$ref": "Runtime.RemoteObjectId", + "optional": true, + "description": "JavaScript object id of the node wrapper." } ], "description": "Focuses the given element.", @@ -6025,11 +6038,6 @@ { "name": "setFileInputFiles", "parameters": [ - { - "name": "nodeId", - "$ref": "NodeId", - "description": "Id of the file input node to set files for." - }, { "name": "files", "type": "array", @@ -6037,6 +6045,24 @@ "type": "string" }, "description": "Array of file paths to set." + }, + { + "name": "nodeId", + "$ref": "NodeId", + "optional": true, + "description": "Identifier of the node." + }, + { + "name": "backendNodeId", + "$ref": "BackendNodeId", + "optional": true, + "description": "Identifier of the backend node." + }, + { + "name": "objectId", + "$ref": "Runtime.RemoteObjectId", + "optional": true, + "description": "JavaScript object id of the node wrapper." } ], "description": "Sets files for the given file input element.", @@ -6048,7 +6074,20 @@ { "name": "nodeId", "$ref": "NodeId", - "description": "Id of the node to get box model for." + "optional": true, + "description": "Identifier of the node." + }, + { + "name": "backendNodeId", + "$ref": "BackendNodeId", + "optional": true, + "description": "Identifier of the backend node." + }, + { + "name": "objectId", + "$ref": "Runtime.RemoteObjectId", + "optional": true, + "description": "JavaScript object id of the node wrapper." } ], "returns": [ @@ -7517,6 +7556,30 @@ "type": "string", "description": "Node's nodeValue." }, + { + "name": "textValue", + "type": "string", + "optional": true, + "description": "Only set for textarea elements, contains the text value." + }, + { + "name": "inputValue", + "type": "string", + "optional": true, + "description": "Only set for input elements, contains the input's associated text value." + }, + { + "name": "inputChecked", + "type": "boolean", + "optional": true, + "description": "Only set for radio and checkbox input elements, indicates if the element has been checked" + }, + { + "name": "optionSelected", + "type": "boolean", + "optional": true, + "description": "Only set for option elements, indicates if the element has been selected" + }, { "name": "backendNodeId", "$ref": "DOM.BackendNodeId", diff --git a/input.go b/input.go index 91b0339..0e5ea44 100644 --- a/input.go +++ b/input.go @@ -65,7 +65,7 @@ func MouseClickNode(n *cdp.Node, opts ...MouseOption) Action { return err } - box, err := dom.GetBoxModel(n.NodeID).Do(ctxt, h) + box, err := dom.GetBoxModel().WithNodeID(n.NodeID).Do(ctxt, h) if err != nil { return err } @@ -174,7 +174,7 @@ func KeyAction(keys string, opts ...KeyOption) Action { // KeyActionNode dispatches a key event on a node. func KeyActionNode(n *cdp.Node, keys string, opts ...KeyOption) Action { return ActionFunc(func(ctxt context.Context, h cdp.Handler) error { - err := dom.Focus(n.NodeID).Do(ctxt, h) + err := dom.Focus().WithNodeID(n.NodeID).Do(ctxt, h) if err != nil { return err } diff --git a/query.go b/query.go index 6aec215..3d909dc 100644 --- a/query.go +++ b/query.go @@ -55,7 +55,7 @@ func Focus(sel interface{}, opts ...QueryOption) Action { return fmt.Errorf("selector `%s` did not return any nodes", sel) } - return dom.Focus(nodes[0].NodeID).Do(ctxt, h) + return dom.Focus().WithNodeID(nodes[0].NodeID).Do(ctxt, h) }, opts...) } @@ -91,7 +91,7 @@ func Dimensions(sel interface{}, model **dom.BoxModel, opts ...QueryOption) Acti return fmt.Errorf("selector `%s` did not return any nodes", sel) } var err error - *model, err = dom.GetBoxModel(nodes[0].NodeID).Do(ctxt, h) + *model, err = dom.GetBoxModel().WithNodeID(nodes[0].NodeID).Do(ctxt, h) return err }, opts...) } @@ -385,7 +385,7 @@ func SendKeys(sel interface{}, v string, opts ...QueryOption) Action { // when working with input[type="file"], call dom.SetFileInputFiles if n.NodeName == "INPUT" && typ == "file" { - return dom.SetFileInputFiles(n.NodeID, []string{v}).Do(ctxt, h) + return dom.SetFileInputFiles([]string{v}).WithNodeID(n.NodeID).Do(ctxt, h) } return KeyActionNode(n, v).Do(ctxt, h) @@ -400,7 +400,7 @@ func SetUploadFiles(sel interface{}, files []string, opts ...QueryOption) Action return fmt.Errorf("selector `%s` did not return any nodes", sel) } - return dom.SetFileInputFiles(nodes[0].NodeID, files).Do(ctxt, h) + return dom.SetFileInputFiles(files).WithNodeID(nodes[0].NodeID).Do(ctxt, h) }, opts...) } @@ -418,7 +418,7 @@ func Screenshot(sel interface{}, picbuf *[]byte, opts ...QueryOption) Action { var err error // get box model - box, err := dom.GetBoxModel(nodes[0].NodeID).Do(ctxt, h) + box, err := dom.GetBoxModel().WithNodeID(nodes[0].NodeID).Do(ctxt, h) if err != nil { return err } diff --git a/sel.go b/sel.go index ec9934b..7d4eddc 100644 --- a/sel.go +++ b/sel.go @@ -293,7 +293,7 @@ func NodeVisible(s *Selector) { var err error // check box model - _, err = dom.GetBoxModel(n.NodeID).Do(ctxt, h) + _, err = dom.GetBoxModel().WithNodeID(n.NodeID).Do(ctxt, h) if err != nil { if isCouldNotComputeBoxModelError(err) { return ErrNotVisible @@ -321,7 +321,7 @@ func NodeNotVisible(s *Selector) { var err error // check box model - _, err = dom.GetBoxModel(n.NodeID).Do(ctxt, h) + _, err = dom.GetBoxModel().WithNodeID(n.NodeID).Do(ctxt, h) if err != nil { if isCouldNotComputeBoxModelError(err) { return nil