Skip to content

Instantly share code, notes, and snippets.

@peterberkenbosch
Created June 7, 2022 11:37
Show Gist options
  • Save peterberkenbosch/c10b6202bdc14b561e17339a9a838fc0 to your computer and use it in GitHub Desktop.
Save peterberkenbosch/c10b6202bdc14b561e17339a9a838fc0 to your computer and use it in GitHub Desktop.
#> CUPRITE_DEBUG=true bundle exec rspec
▶ 0.1939789999742061 {"method":"Target.setDiscoverTargets","params":{"discover":true},"id":1}
◀ 0.20905299996957183 {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"5924a0f8-f2a4-4191-91f5-10b8a7c438f5","type":"browser","title":"","url":"","attached":false,"canAccessOpener":false}}}
◀ 0.20938900019973516 {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"f1c5a289-ed28-4189-8ac4-0ad24b2b6754","type":"browser","title":"","url":"","attached":true,"canAccessOpener":false}}}
◀ 0.2095540000591427 {"id":1,"result":{}}
◀ 0.21007900009863079 {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"2414838B44AB02908BF717CB4EC00444","type":"page","title":"","url":"","attached":false,"canAccessOpener":false,"browserContextId":"E01A5A267B47623CCACF0B7AC58A3B07"}}}
▶ 0.2100900001823902 {"method":"Target.createBrowserContext","params":{},"id":2}
◀ 0.2103089999873191 {"id":2,"result":{"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A"}}
▶ 0.21056700008921325 {"method":"Target.createTarget","params":{"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A","url":"about:blank"},"id":3}
◀ 0.2112220001872629 {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB","type":"page","title":"","url":"","attached":false,"canAccessOpener":false,"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A"}}}
◀ 0.21175900008529425 {"id":3,"result":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB"}}
▶ 0.21302200015634298 {"method":"Page.enable","params":{},"id":1001}
◀ 0.21320400014519691 {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB","type":"page","title":"","url":"about:blank","attached":true,"canAccessOpener":false,"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A"}}}
◀ 0.24027200019918382 {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"2414838B44AB02908BF717CB4EC00444","type":"page","title":"about:blank","url":"about:blank","attached":false,"canAccessOpener":false,"browserContextId":"E01A5A267B47623CCACF0B7AC58A3B07"}}}
◀ 0.24517700006254017 {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB","type":"page","title":"about:blank","url":"about:blank","attached":true,"canAccessOpener":false,"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A"}}}
◀ 0.24557600007392466 {"id":1001,"result":{}}
▶ 0.24587600002996624 {"method":"Runtime.enable","params":{},"id":1002}
◀ 0.24706500000320375 {"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"origin":"://","name":"","uniqueId":"-2295399073682876613.-2421033932604633472","auxData":{"isDefault":true,"type":"default","frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}}}
◀ 0.24721699999645352 {"id":1002,"result":{}}
▶ 0.2473669999744743 {"method":"Page.getFrameTree","params":{},"id":1003}
▶ 0.2475809999741614 {"method":"DOM.enable","params":{},"id":1004}
◀ 0.24795500002801418 {"id":1003,"result":{"frameTree":{"frame":{"id":"390907ABC8D0E73ED254F0A353EE75EB","loaderId":"870E5DFF0D41E4DB8702D28494DFF90F","url":"about:blank","domainAndRegistry":"","securityOrigin":"://","mimeType":"text/html","adFrameStatus":{"adFrameType":"none"},"secureContextType":"InsecureScheme","crossOriginIsolatedContextType":"NotIsolated","gatedAPIFeatures":[]}}}}
◀ 0.2481019999831915 {"id":1004,"result":{}}
▶ 0.24839600012637675 {"method":"CSS.enable","params":{},"id":1005}
◀ 0.24872000003233552 {"id":1005,"result":{}}
▶ 0.24894600012339652 {"method":"Log.enable","params":{},"id":1006}
◀ 0.2494530000258237 {"id":1006,"result":{}}
▶ 0.24962700018659234 {"method":"Network.enable","params":{},"id":1007}
◀ 0.24995500012300909 {"id":1007,"result":{}}
▶ 0.25008400017395616 {"method":"Page.setDownloadBehavior","params":{"behavior":"allow","downloadPath":"./tmp/capybara"},"id":1008}
◀ 0.2504740001168102 {"id":1008,"result":{}}
▶ 0.2510079999919981 {"method":"Page.addScriptToEvaluateOnNewDocument","params":{"source":"class InvalidSelector extends Error {}\nclass TimedOutPromise extends Error {}\nclass MouseEventFailed extends Error {}\n\nconst EVENTS = {\n FOCUS: [\"blur\", \"focus\", \"focusin\", \"focusout\"],\n MOUSE: [\"click\", \"dblclick\", \"mousedown\", \"mouseenter\", \"mouseleave\",\n \"mousemove\", \"mouseover\", \"mouseout\", \"mouseup\", \"contextmenu\"],\n FORM: [\"submit\"]\n}\n\nclass Cuprite {\n constructor() {\n this._json = JSON; // In case someone overrides it like mootools\n }\n\n find(method, selector, within = document) {\n try {\n let results = [];\n\n if (method == \"xpath\") {\n let xpath = document.evaluate(selector, within, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n for (let i = 0; i \u003c xpath.snapshotLength; i++) {\n results.push(xpath.snapshotItem(i));\n }\n } else {\n results = Array.from(within.querySelectorAll(selector));\n }\n\n return results;\n } catch (error) {\n // DOMException.INVALID_EXPRESSION_ERR is undefined, using pure code\n if (error.code == DOMException.SYNTAX_ERR || error.code == 51) {\n throw new InvalidSelector;\n } else {\n throw error;\n }\n }\n }\n\n parents(node) {\n let nodes = [];\n let parent = node.parentNode;\n while (parent != document \u0026\u0026 parent !== null) {\n nodes.push(parent);\n parent = parent.parentNode;\n }\n return nodes;\n }\n\n visibleText(node) {\n if (this.isVisible(node)) {\n if (node.nodeName == \"TEXTAREA\") {\n return node.textContent;\n } else {\n if (node instanceof SVGElement) {\n return node.textContent;\n } else {\n return node.innerText;\n }\n }\n }\n }\n\n isVisible(node) {\n let mapName, style;\n // if node is area, check visibility of relevant image\n if (node.tagName === \"AREA\") {\n mapName = document.evaluate(\"./ancestor::map/@name\", node, null, XPathResult.STRING_TYPE, null).stringValue;\n node = document.querySelector(`img[usemap=\"#${mapName}\"]`);\n if (node == null) {\n return false;\n }\n }\n\n while (node) {\n style = window.getComputedStyle(node);\n if (style.display === \"none\" || style.visibility === \"hidden\" || parseFloat(style.opacity) === 0) {\n return false;\n }\n node = node.parentElement;\n }\n\n return true;\n }\n\n\n isDisabled(node) {\n let xpath = \"parent::optgroup[@disabled] | \\\n ancestor::select[@disabled] | \\\n parent::fieldset[@disabled] | \\\n ancestor::*[not(self::legend) or preceding-sibling::legend][parent::fieldset[@disabled]]\";\n\n return node.disabled || document.evaluate(xpath, node, null, XPathResult.BOOLEAN_TYPE, null).booleanValue;\n }\n\n path(node) {\n let nodes = [node];\n let parent = node.parentNode;\n while (parent !== document \u0026\u0026 parent !== null) {\n nodes.unshift(parent);\n parent = parent.parentNode;\n }\n\n let selectors = nodes.map(node =\u003e {\n let prevSiblings = [];\n let xpath = document.evaluate(`./preceding-sibling::${node.tagName}`, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n\n for (let i = 0; i \u003c xpath.snapshotLength; i++) {\n prevSiblings.push(xpath.snapshotItem(i));\n }\n\n return `${node.tagName}[${(prevSiblings.length + 1)}]`;\n });\n\n return `//${selectors.join(\"/\")}`;\n }\n\n set(node, value) {\n if (node.readOnly) return;\n\n if (node.maxLength \u003e= 0) {\n value = value.substr(0, node.maxLength);\n }\n\n let valueBefore = node.value;\n\n this.trigger(node, \"focus\");\n this.setValue(node, \"\");\n\n if (node.type == \"number\" || node.type == \"date\" || node.type == \"range\") {\n this.setValue(node, value);\n this.input(node);\n } else if (node.type == \"time\") {\n this.setValue(node, new Date(value).toTimeString().split(\" \")[0]);\n this.input(node);\n } else if (node.type == \"datetime-local\") {\n value = new Date(value);\n let year = value.getFullYear();\n let month = (\"0\" + (value.getMonth() + 1)).slice(-2);\n let date = (\"0\" + value.getDate()).slice(-2);\n let hour = (\"0\" + value.getHours()).slice(-2);\n let min = (\"0\" + value.getMinutes()).slice(-2);\n let sec = (\"0\" + value.getSeconds()).slice(-2);\n this.setValue(node, `${year}-${month}-${date}T${hour}:${min}:${sec}`);\n this.input(node);\n } else {\n for (let i = 0; i \u003c value.length; i++) {\n let char = value[i];\n let keyCode = this.characterToKeyCode(char);\n // call the following functions in order, if one returns false (preventDefault),\n // stop the call chain\n [\n () =\u003e this.keyupdowned(node, \"keydown\", keyCode),\n () =\u003e this.keypressed(node, false, false, false, false, char.charCodeAt(0), char.charCodeAt(0)),\n () =\u003e {\n this.setValue(node, node.value + char)\n this.input(node)\n }\n ].some(fn =\u003e fn())\n\n this.keyupdowned(node, \"keyup\", keyCode);\n }\n }\n\n if (valueBefore !== node.value) {\n this.changed(node);\n }\n this.trigger(node, \"blur\");\n }\n\n setValue(node, value) {\n let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, \"value\").set;\n let nativeTextareaValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, \"value\").set;\n\n if (node.tagName.toLowerCase() === 'input') {\n return nativeInputValueSetter.call(node, value);\n }\n return nativeTextareaValueSetter.call(node, value);\n }\n\n input(node) {\n let event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"input\", true, false);\n node.dispatchEvent(event);\n }\n\n /**\n * @return {boolean} false when an event handler called preventDefault()\n */\n keyupdowned(node, eventName, keyCode) {\n let event = document.createEvent(\"UIEvents\");\n event.initEvent(eventName, true, true);\n event.keyCode = keyCode;\n event.charCode = 0;\n return !node.dispatchEvent(event);\n }\n\n /**\n * @return {boolean} false when an event handler called preventDefault()\n */\n keypressed(node, altKey, ctrlKey, shiftKey, metaKey, keyCode, charCode) {\n event = document.createEvent(\"UIEvents\");\n event.initEvent(\"keypress\", true, true);\n event.window = window;\n event.altKey = altKey;\n event.ctrlKey = ctrlKey;\n event.shiftKey = shiftKey;\n event.metaKey = metaKey;\n event.keyCode = keyCode;\n event.charCode = charCode;\n return !node.dispatchEvent(event);\n }\n\n characterToKeyCode(char) {\n const specialKeys = {\n 96: 192, // `\n 45: 189, // -\n 61: 187, // =\n 91: 219, // [\n 93: 221, // ]\n 92: 220, // \\\n 59: 186, // ;\n 39: 222, // '\n 44: 188, // ,\n 46: 190, // .\n 47: 191, // /\n 127: 46, // delete\n 126: 192, // ~\n 33: 49, // !\n 64: 50, // @\n 35: 51, // #\n 36: 52, // $\n 37: 53, // %\n 94: 54, // ^\n 38: 55, // \u0026\n 42: 56, // *\n 40: 57, // (\n 41: 48, // )\n 95: 189, // _\n 43: 187, // +\n 123: 219, // {\n 125: 221, // }\n 124: 220, // |\n 58: 186, // :\n 34: 222, // \"\n 60: 188, // \u003c\n 62: 190, // \u003e\n 63: 191, // ?\n }\n\n let code = char.toUpperCase().charCodeAt(0);\n return specialKeys[code] || code;\n }\n\n scrollIntoViewport(node) {\n let areaImage = this._getAreaImage(node);\n\n if (areaImage) {\n return this.scrollIntoViewport(areaImage);\n } else {\n node.scrollIntoViewIfNeeded();\n\n if (!this._isInViewport(node)) {\n node.scrollIntoView({block: \"center\", inline: \" ◀ 0.25168400001712143 {"id":1009,"result":{"identifier":"1"}}
center\", behavior: \"instant\"});\n return this._isInViewport(node);\n }\n\n return true;\n }\n }\n\n mouseEventTest(node, name, x, y) {\n let frameOffset = this._frameOffset();\n x -= frameOffset.left;\n y -= frameOffset.top;\n\n let element = document.elementFromPoint(x, y);\n\n let el = element;\n while (el) {\n if (el == node) {\n return true;\n } else {\n el = el.parentNode;\n }\n }\n\n let selector = element \u0026\u0026 this._getSelector(element) || \"none\";\n throw new MouseEventFailed([name, selector, x, y].join(\", \"));\n }\n\n _getAreaImage(node) {\n if (\"area\" == node.tagName.toLowerCase()) {\n let map = node.parentNode;\n if (map.tagName.toLowerCase() != \"map\") {\n throw new Error(\"the area is not within a map\");\n }\n\n let mapName = map.getAttribute(\"name\");\n if (typeof mapName === \"undefined\" || mapName === null) {\n throw new Error(\"area's parent map must have a name\");\n }\n\n mapName = `#${mapName.toLowerCase()}`;\n let imageNode = this.find(\"css\", `img[usemap='${mapName}']`)[0];\n if (typeof imageNode === \"undefined\" || imageNode === null) {\n throw new Error(\"no image matches the map\");\n }\n\n return imageNode;\n }\n }\n\n _frameOffset() {\n let win = window;\n let offset = { top: 0, left: 0 };\n\n while (win.frameElement) {\n let rect = win.frameElement.getClientRects()[0];\n let style = win.getComputedStyle(win.frameElement);\n win = win.parent;\n\n offset.top += rect.top + parseInt(style.getPropertyValue(\"padding-top\"), 10)\n offset.left += rect.left + parseInt(style.getPropertyValue(\"padding-left\"), 10)\n }\n\n return offset;\n }\n\n _getSelector(el) {\n let selector = (el.tagName != 'HTML') ? this._getSelector(el.parentNode) + \" \" : \"\";\n selector += el.tagName.toLowerCase();\n if (el.id) { selector += `#${el.id}` };\n el.classList.forEach(c =\u003e selector += `.${c}`);\n return selector;\n }\n\n _isInViewport(node) {\n let rect = node.getBoundingClientRect();\n return rect.top \u003e= 0 \u0026\u0026\n rect.left \u003e= 0 \u0026\u0026\n rect.bottom \u003c= window.innerHeight \u0026\u0026\n rect.right \u003c= window.innerWidth;\n }\n\n select(node, value) {\n if (this.isDisabled(node)) {\n return false;\n } else if (value == false \u0026\u0026 !node.parentNode.multiple) {\n return false;\n } else {\n this.trigger(node.parentNode, \"focus\");\n\n node.selected = value;\n this.changed(node);\n\n this.trigger(node.parentNode, \"blur\");\n return true;\n }\n }\n\n changed(node) {\n let element;\n let event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"change\", true, false);\n\n // In the case of an OPTION tag, the change event should come\n // from the parent SELECT\n if (node.nodeName == \"OPTION\") {\n element = node.parentNode\n if (element.nodeName == \"OPTGROUP\") {\n element = element.parentNode\n }\n element\n } else {\n element = node\n }\n\n element.dispatchEvent(event)\n }\n\n trigger(node, name, options = {}) {\n let event;\n\n if (EVENTS.MOUSE.indexOf(name) != -1) {\n event = document.createEvent(\"MouseEvent\");\n event.initMouseEvent(\n name, true, true, window, 0,\n options[\"screenX\"] || 0, options[\"screenY\"] || 0,\n options[\"clientX\"] || 0, options[\"clientY\"] || 0,\n options[\"ctrlKey\"] || false,\n options[\"altKey\"] || false,\n options[\"shiftKey\"] || false,\n options[\"metaKey\"] || false,\n options[\"button\"] || 0, null\n )\n } else if (EVENTS.FOCUS.indexOf(name) != -1) {\n event = this.obtainEvent(name);\n } else if (EVENTS.FORM.indexOf(name) != -1) {\n event = this.obtainEvent(name);\n } else {\n throw \"Unknown event\";\n }\n\n node.dispatchEvent(event);\n }\n\n obtainEvent(name) {\n let event = document.createEvent(\"HTMLEvents\");\n event.initEvent(name, true, true);\n return event;\n }\n\n getAttributes(node) {\n let attrs = {};\n for (let i = 0, len = node.attributes.length; i \u003c len; i++) {\n let attr = node.attributes[i];\n attrs[attr.name] = attr.value.replace(\"\\n\", \"\\\\n\");\n }\n\n return this._json.stringify(attrs);\n }\n\n getAttribute(node, name) {\n if (name == \"checked\" || name == \"selected\") {\n return node[name];\n } else {\n return node.getAttribute(name);\n }\n }\n\n value(node) {\n if (node.tagName == \"SELECT\" \u0026\u0026 node.multiple) {\n let result = []\n\n for (let i = 0, len = node.children.length; i \u003c len; i++) {\n let option = node.children[i];\n if (option.selected) {\n result.push(option.value);\n }\n }\n\n return result;\n } else {\n return node.value;\n }\n }\n\n deleteText(node) {\n let range = document.createRange();\n range.selectNodeContents(node);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n window.getSelection().deleteFromDocument();\n }\n\n containsSelection(node) {\n let selectedNode = document.getSelection().focusNode;\n\n if (!selectedNode) {\n return false;\n }\n\n if (selectedNode.nodeType == 3) {\n selectedNode = selectedNode.parentNode;\n }\n\n return node.contains(selectedNode);\n }\n\n // This command is purely for testing error handling\n browserError() {\n throw new Error(\"zomg\");\n }\n}\n\nwindow._cuprite = new Cuprite;\n"},"id":1009}
▶ 0.2524390001781285 {"method":"Runtime.evaluate","params":{"expression":"class InvalidSelector extends Error {}\nclass TimedOutPromise extends Error {}\nclass MouseEventFailed extends Error {}\n\nconst EVENTS = {\n FOCUS: [\"blur\", \"focus\", \"focusin\", \"focusout\"],\n MOUSE: [\"click\", \"dblclick\", \"mousedown\", \"mouseenter\", \"mouseleave\",\n \"mousemove\", \"mouseover\", \"mouseout\", \"mouseup\", \"contextmenu\"],\n FORM: [\"submit\"]\n}\n\nclass Cuprite {\n constructor() {\n this._json = JSON; // In case someone overrides it like mootools\n }\n\n find(method, selector, within = document) {\n try {\n let results = [];\n\n if (method == \"xpath\") {\n let xpath = document.evaluate(selector, within, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n for (let i = 0; i \u003c xpath.snapshotLength; i++) {\n results.push(xpath.snapshotItem(i));\n }\n } else {\n results = Array.from(within.querySelectorAll(selector));\n }\n\n return results;\n } catch (error) {\n // DOMException.INVALID_EXPRESSION_ERR is undefined, using pure code\n if (error.code == DOMException.SYNTAX_ERR || error.code == 51) {\n throw new InvalidSelector;\n } else {\n throw error;\n }\n }\n }\n\n parents(node) {\n let nodes = [];\n let parent = node.parentNode;\n while (parent != document \u0026\u0026 parent !== null) {\n nodes.push(parent);\n parent = parent.parentNode;\n }\n return nodes;\n }\n\n visibleText(node) {\n if (this.isVisible(node)) {\n if (node.nodeName == \"TEXTAREA\") {\n return node.textContent;\n } else {\n if (node instanceof SVGElement) {\n return node.textContent;\n } else {\n return node.innerText;\n }\n }\n }\n }\n\n isVisible(node) {\n let mapName, style;\n // if node is area, check visibility of relevant image\n if (node.tagName === \"AREA\") {\n mapName = document.evaluate(\"./ancestor::map/@name\", node, null, XPathResult.STRING_TYPE, null).stringValue;\n node = document.querySelector(`img[usemap=\"#${mapName}\"]`);\n if (node == null) {\n return false;\n }\n }\n\n while (node) {\n style = window.getComputedStyle(node);\n if (style.display === \"none\" || style.visibility === \"hidden\" || parseFloat(style.opacity) === 0) {\n return false;\n }\n node = node.parentElement;\n }\n\n return true;\n }\n\n\n isDisabled(node) {\n let xpath = \"parent::optgroup[@disabled] | \\\n ancestor::select[@disabled] | \\\n parent::fieldset[@disabled] | \\\n ancestor::*[not(self::legend) or preceding-sibling::legend][parent::fieldset[@disabled]]\";\n\n return node.disabled || document.evaluate(xpath, node, null, XPathResult.BOOLEAN_TYPE, null).booleanValue;\n }\n\n path(node) {\n let nodes = [node];\n let parent = node.parentNode;\n while (parent !== document \u0026\u0026 parent !== null) {\n nodes.unshift(parent);\n parent = parent.parentNode;\n }\n\n let selectors = nodes.map(node =\u003e {\n let prevSiblings = [];\n let xpath = document.evaluate(`./preceding-sibling::${node.tagName}`, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n\n for (let i = 0; i \u003c xpath.snapshotLength; i++) {\n prevSiblings.push(xpath.snapshotItem(i));\n }\n\n return `${node.tagName}[${(prevSiblings.length + 1)}]`;\n });\n\n return `//${selectors.join(\"/\")}`;\n }\n\n set(node, value) {\n if (node.readOnly) return;\n\n if (node.maxLength \u003e= 0) {\n value = value.substr(0, node.maxLength);\n }\n\n let valueBefore = node.value;\n\n this.trigger(node, \"focus\");\n this.setValue(node, \"\");\n\n if (node.type == \"number\" || node.type == \"date\" || node.type == \"range\") {\n this.setValue(node, value);\n this.input(node);\n } else if (node.type == \"time\") {\n this.setValue(node, new Date(value).toTimeString().split(\" \")[0]);\n this.input(node);\n } else if (node.type == \"datetime-local\") {\n value = new Date(value);\n let year = value.getFullYear();\n let month = (\"0\" + (value.getMonth() + 1)).slice(-2);\n let date = (\"0\" + value.getDate()).slice(-2);\n let hour = (\"0\" + value.getHours()).slice(-2);\n let min = (\"0\" + value.getMinutes()).slice(-2);\n let sec = (\"0\" + value.getSeconds()).slice(-2);\n this.setValue(node, `${year}-${month}-${date}T${hour}:${min}:${sec}`);\n this.input(node);\n } else {\n for (let i = 0; i \u003c value.length; i++) {\n let char = value[i];\n let keyCode = this.characterToKeyCode(char);\n // call the following functions in order, if one returns false (preventDefault),\n // stop the call chain\n [\n () =\u003e this.keyupdowned(node, \"keydown\", keyCode),\n () =\u003e this.keypressed(node, false, false, false, false, char.charCodeAt(0), char.charCodeAt(0)),\n () =\u003e {\n this.setValue(node, node.value + char)\n this.input(node)\n }\n ].some(fn =\u003e fn())\n\n this.keyupdowned(node, \"keyup\", keyCode);\n }\n }\n\n if (valueBefore !== node.value) {\n this.changed(node);\n }\n this.trigger(node, \"blur\");\n }\n\n setValue(node, value) {\n let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, \"value\").set;\n let nativeTextareaValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, \"value\").set;\n\n if (node.tagName.toLowerCase() === 'input') {\n return nativeInputValueSetter.call(node, value);\n }\n return nativeTextareaValueSetter.call(node, value);\n }\n\n input(node) {\n let event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"input\", true, false);\n node.dispatchEvent(event);\n }\n\n /**\n * @return {boolean} false when an event handler called preventDefault()\n */\n keyupdowned(node, eventName, keyCode) {\n let event = document.createEvent(\"UIEvents\");\n event.initEvent(eventName, true, true);\n event.keyCode = keyCode;\n event.charCode = 0;\n return !node.dispatchEvent(event);\n }\n\n /**\n * @return {boolean} false when an event handler called preventDefault()\n */\n keypressed(node, altKey, ctrlKey, shiftKey, metaKey, keyCode, charCode) {\n event = document.createEvent(\"UIEvents\");\n event.initEvent(\"keypress\", true, true);\n event.window = window;\n event.altKey = altKey;\n event.ctrlKey = ctrlKey;\n event.shiftKey = shiftKey;\n event.metaKey = metaKey;\n event.keyCode = keyCode;\n event.charCode = charCode;\n return !node.dispatchEvent(event);\n }\n\n characterToKeyCode(char) {\n const specialKeys = {\n 96: 192, // `\n 45: 189, // -\n 61: 187, // =\n 91: 219, // [\n 93: 221, // ]\n 92: 220, // \\\n 59: 186, // ;\n 39: 222, // '\n 44: 188, // ,\n 46: 190, // .\n 47: 191, // /\n 127: 46, // delete\n 126: 192, // ~\n 33: 49, // !\n 64: 50, // @\n 35: 51, // #\n 36: 52, // $\n 37: 53, // %\n 94: 54, // ^\n 38: 55, // \u0026\n 42: 56, // *\n 40: 57, // (\n 41: 48, // )\n 95: 189, // _\n 43: 187, // +\n 123: 219, // {\n 125: 221, // }\n 124: 220, // |\n 58: 186, // :\n 34: 222, // \"\n 60: 188, // \u003c\n 62: 190, // \u003e\n 63: 191, // ?\n }\n\n let code = char.toUpperCase().charCodeAt(0);\n return specialKeys[code] || code;\n }\n\n scrollIntoViewport(node) {\n let areaImage = this._getAreaImage(node);\n\n if (areaImage) {\n return this.scrollIntoViewport(areaImage);\n } else {\n node.scrollIntoViewIfNeeded();\n\n if (!this._isInViewport(node)) {\n node.scrollIntoView({block: \"center\", inline: \"center\", behavior: \"instant\"});\n return this._isInViewport(node);\n }\n\n return true;\n }\n }\n\n mouseEventTest(node, name, x, y) {\n let frameOffset = this._frameOffset();\n x -= frameOffset.left;\n y -= frameOffset.top;\n\n let element = document.elementFromPoint(x, y);\n\n let el = element;\n while (el) {\n if (el == node) {\n return true;\n } else {\n el = el.parentNode;\n }\n }\n\n let selector = element \u0026\u0026 this._getSelector(element) || \"none\";\n throw new MouseEventFailed([name, selector, x, y].join(\", \"));\n }\n\n _getAreaImage(node) {\n if (\"area\" == node.tagName.toLowerCase()) {\n let map = node.parentNode;\n if (map.tagName.toLowerCase() != \"map\") {\n throw new Error(\"the area is not within a map\");\n }\n\n let mapName = map.getAttribute(\"name\");\n if (typeof mapName === \"undefined\" || mapName === null) {\n throw new Error(\"area's parent map must have a name\");\n }\n\n mapName = `#${mapName.toLowerCase()}`;\n let imageNode = this.find(\"css\", `img[usemap='${mapName}']`)[0];\n if (typeof imageNode === \"undefined\" || imageNode === null) {\n throw new Error(\"no image matches the map\");\n }\n\n return imageNode;\n }\n }\n\n _frameOffset() {\n let win = window;\n let offset = { top: 0, left: 0 };\n\n while (win.frameElement) {\n let rect = win.frameElement.getClientRects()[0];\n let style = win.getComputedStyle(win.frameElement);\n win = win.parent;\n\n offset.top += rect.top + parseInt(style.getPropertyValue(\"padding-top\"), 10)\n offset.left += rect.left + parseInt(style.getPropertyValue(\"padding-left\"), 10)\n }\n\n return offset;\n }\n\n _getSelector(el) {\n let selector = (el.tagName != 'HTML') ? this._getSelector(el.parentNode) + \" \" : \"\";\n selector += el.tagName.toLowerCase();\n if (el.id) { selector += `#${el.id}` };\n el.classList.forEach(c =\u003e selector += `.${c}`);\n return selector;\n }\n\n _isInViewport(node) {\n let rect = node.getBoundingClientRect();\n return rect.top \u003e= 0 \u0026\u0026\n rect.left \u003e= 0 \u0026\u0026\n rect.bottom \u003c= window.innerHeight \u0026\u0026\n rect.right \u003c= window.innerWidth;\n }\n\n select(node, value) {\n if (this.isDisabled(node)) {\n return false;\n } else if (value == false \u0026\u0026 !node.parentNode.multiple) {\n return false;\n } else {\n this.trigger(node.parentNode, \"focus\");\n\n node.selected = value;\n this.changed(node);\n\n this.trigger(node.parentNode, \"blur\");\n return true;\n }\n }\n\n changed(node) {\n let element;\n let event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"change\", true, false);\n\n // In the case of an OPTION tag, the change event should come\n // from the parent SELECT\n if (node.nodeName == \"OPTION\") {\n element = node.parentNode\n if (element.nodeName == \"OPTGROUP\") {\n element = element.parentNode\n }\n element\n } else {\n element = node\n }\n\n element.dispatchEvent(event)\n }\n\n trigger(node, name, options = {}) {\n let event;\n\n if (EVENTS.MOUSE.indexOf(name) != -1) {\n event = document.createEvent(\"MouseEvent\");\n event.initMouseEvent(\n name, true, true, window, 0,\n options[\"screenX\"] || 0, options[\"screenY\"] || 0,\n options[\"clientX\"] || 0, options[\"clientY\"] || 0,\n options[\"ctrlKey\"] || false,\n options[\"altKey\"] || false,\n options[\"shiftKey\"] || false,\n options[\"metaKey\"] || false,\n options[\"button\"] || 0, null\n )\n } else if (EVENTS.FOCUS.indexOf(name) != -1) {\n event = this.obtainEvent(name);\n } else if (EVENTS.FORM.indexOf(name) != -1) {\n event = this.obtainEvent(name);\n } else {\n throw \"Unknown event\";\n }\n\n node.dispatchEvent(event);\n }\n\n obtainEvent(name) {\n let event = document.createEvent(\"HTMLEvents\");\n event.initEvent(name, true, true);\n return event;\n }\n\n getAttributes(node) {\n let attrs = {};\n for (let i = 0, len = node.attributes.length; i \u003c len; i++) {\n let attr = node.attributes[i];\n attrs[attr.name] = attr.value.replace(\"\\n\", \"\\\\n\");\n }\n\n return this._json.stringify(attrs);\n }\n\n getAttribute(node, name) {\n if (name == \"checked\" || name == \"selected\") {\n return node[name];\n } else {\n return node.getAttribute(name);\n }\n }\n\n value(node) {\n if (node.tagName == \"SELECT\" \u0026\u0026 node.multiple) {\n let result = []\n\n for (let i = 0, len = node.children.length; i \u003c len; i++) {\n let option = node.children[i];\n if (option.selected) {\n result.push(option.value);\n }\n }\n\n return result;\n } else {\n return node.value;\n }\n }\n\n deleteText(node) {\n let range = document.createRange();\n range.selectNodeContents(node);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n window.getSelection().deleteFromDocument();\n }\n\n containsSelection(node) {\n let selectedNode = document.getSelection().focusNode;\n\n if (!selectedNode) {\n return false;\n }\n\n if (selectedNode.nodeType == 3) {\n selectedNode = selectedNode.parentNode;\n }\n\n return node.contains(selectedNode);\n }\n\n // This command is purely for testing error handling\n browserError() {\n throw new Error(\"zomg\");\n }\n}\n\nwindow._cuprite = new Cuprite;\n","contextId":1,"returnByValue":true},"id":1010}
◀ 0.25353300012648106 {"id":1010,"result":{"result":{"type":"object","value":{"_json":{}}}}}
▶ 0.2544909999705851 {"method":"Browser.getWindowForTarget","params":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB"},"id":4}
◀ 0.25479000015184283 {"id":4,"result":{"windowId":2,"bounds":{"left":0,"top":280,"width":1200,"height":800,"windowState":"normal"}}}
▶ 0.2553410001564771 {"method":"Browser.setWindowBounds","params":{"windowId":2,"bounds":{"windowState":"normal"}},"id":5}
◀ 0.25550099997781217 {"id":5,"result":{}}
▶ 0.25559299997985363 {"method":"Browser.getWindowForTarget","params":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB"},"id":6}
◀ 0.2558220000937581 {"id":6,"result":{"windowId":2,"bounds":{"left":0,"top":280,"width":1200,"height":800,"windowState":"normal"}}}
▶ 0.2559200001414865 {"method":"Browser.setWindowBounds","params":{"windowId":2,"bounds":{"width":1200,"height":800}},"id":7}
◀ 0.2560360000934452 {"id":7,"result":{}}
▶ 0.2561690001748502 {"method":"Emulation.setDeviceMetricsOverride","params":{"width":1200,"height":800,"deviceScaleFactor":1,"mobile":false,"fitWindow":false},"id":1011}
◀ 0.25642300001345575 {"method":"CSS.mediaQueryResultChanged","params":{}}
◀ 0.2564540000166744 {"id":1011,"result":{}}
▶ 0.2566910001914948 {"method":"Page.getNavigationHistory","params":{},"id":1012}
◀ 0.2568290000781417 {"id":1012,"result":{"currentIndex":0,"entries":[{"id":2,"url":"about:blank","userTypedURL":"about:blank","title":"","transitionType":"typed"}]}}
▶ 0.25700900005176663 {"method":"Page.navigate","params":{"url":"http://phbx-mbp-max:61265/"},"id":1013}
◀ 0.25738100009039044 {"method":"Network.requestWillBeSent","params":{"requestId":"E6BA76DD931022EF6D3C542DFCA3805B","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","documentURL":"http://phbx-mbp-max:61265/","request":{"url":"http://phbx-mbp-max:61265/","method":"GET","headers":{"Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/102.0.5005.61 Safari/537.36"},"mixedContentType":"none","initialPriority":"VeryHigh","referrerPolicy":"strict-origin-when-cross-origin","isSameSite":true},"timestamp":1296259.562561,"wallTime":1654601790.527995,"initiator":{"type":"other"},"redirectHasExtraInfo":false,"type":"Document","frameId":"390907ABC8D0E73ED254F0A353EE75EB","hasUserGesture":false}}
◀ 0.26415699999779463 {"method":"Network.requestWillBeSentExtraInfo","params":{"requestId":"E6BA76DD931022EF6D3C542DFCA3805B","associatedCookies":[],"headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","Host":"phbx-mbp-max:61265","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/102.0.5005.61 Safari/537.36"},"connectTiming":{"requestTime":1296259.562834}}}
◀ 0.3095240001566708 {"method":"Network.responseReceivedExtraInfo","params":{"requestId":"E6BA76DD931022EF6D3C542DFCA3805B","blockedCookies":[],"headers":{"Cache-Control":"max-age=0, private, must-revalidate","Content-Type":"text/html; charset=utf-8","ETag":"W/\"5b2e3a80c7d2e4508066fac2ad4fdae7\"","Link":"</assets/application-4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7.css>; rel=preload; as=style; nopush","Referrer-Policy":"strict-origin-when-cross-origin","Transfer-Encoding":"chunked","X-Content-Type-Options":"nosniff","X-Download-Options":"noopen","X-Frame-Options":"SAMEORIGIN","X-Permitted-Cross-Domain-Policies":"none","X-Request-Id":"f0103248-a769-46a3-aff1-8524d31bce36","X-Runtime":"0.038856","X-XSS-Protection":"0"},"resourceIPAddressSpace":"Private","statusCode":200,"headersText":"HTTP/1.1 200 OK\r\nX-Frame-Options: SAMEORIGIN\r\nX-XSS-Protection: 0\r\nX-Content-Type-Options: nosniff\r\nX-Download-Options: noopen\r\nX-Permitted-Cross-Domain-Policies: none\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nLink: </assets/application-4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7.css>; rel=preload; as=style; nopush\r\nContent-Type: text/html; charset=utf-8\r\nETag: W/\"5b2e3a80c7d2e4508066fac2ad4fdae7\"\r\nCache-Control: max-age=0, private, must-revalidate\r\nX-Request-Id: f0103248-a769-46a3-aff1-8524d31bce36\r\nX-Runtime: 0.038856\r\nTransfer-Encoding: chunked\r\n\r\n"}}
◀ 0.309718000004068 {"method":"Network.responseReceived","params":{"requestId":"E6BA76DD931022EF6D3C542DFCA3805B","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","timestamp":1296259.614891,"type":"Document","response":{"url":"http://phbx-mbp-max:61265/","status":200,"statusText":"OK","headers":{"Cache-Control":"max-age=0, private, must-revalidate","Content-Type":"text/html; charset=utf-8","ETag":"W/\"5b2e3a80c7d2e4508066fac2ad4fdae7\"","Link":"</assets/application-4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7.css>; rel=preload; as=style; nopush","Referrer-Policy":"strict-origin-when-cross-origin","Transfer-Encoding":"chunked","X-Content-Type-Options":"nosniff","X-Download-Options":"noopen","X-Frame-Options":"SAMEORIGIN","X-Permitted-Cross-Domain-Policies":"none","X-Request-Id":"f0103248-a769-46a3-aff1-8524d31bce36","X-Runtime":"0.038856","X-XSS-Protection":"0"},"mimeType":"text/html","connectionReused":false,"connectionId":14,"remoteIPAddress":"192.168.1.56","remotePort":61265,"fromDiskCache":false,"fromServiceWorker":false,"fromPrefetchCache":false,"encodedDataLength":587,"timing":{"requestTime":1296259.562834,"proxyStart":-1,"proxyEnd":-1,"dnsStart":0.224,"dnsEnd":5.931,"connectStart":5.931,"connectEnd":6.267,"sslStart":-1,"sslEnd":-1,"workerStart":-1,"workerReady":-1,"workerFetchStart":-1,"workerRespondWithSettled":-1,"sendStart":6.319,"sendEnd":6.357,"pushStart":0,"pushEnd":0,"receiveHeadersEnd":51.727},"responseTime":1.654601790579908e+12,"protocol":"http/1.1","securityState":"insecure"},"hasExtraInfo":true,"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}
◀ 0.3097860000561923 {"id":1013,"result":{"frameId":"390907ABC8D0E73ED254F0A353EE75EB","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B"}}
◀ 0.31042400002479553 {"method":"Page.frameStartedLoading","params":{"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}
◀ 0.31104400008916855 {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB","type":"page","title":"phbx-mbp-max:61265","url":"http://phbx-mbp-max:61265/","attached":true,"canAccessOpener":false,"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A"}}}
◀ 0.3114680000580847 {"method":"Network.requestWillBeSentExtraInfo","params":{"requestId":"83505.2","associatedCookies":[],"headers":{"Accept":"text/css,*/*;q=0.1","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","Host":"phbx-mbp-max:61265","Referer":"http://phbx-mbp-max:61265/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/102.0.5005.61 Safari/537.36"},"connectTiming":{"requestTime":1296259.616338},"clientSecurityState":{"initiatorIsSecureContext":false,"initiatorIPAddressSpace":"Private","privateNetworkRequestPolicy":"Allow"}}}
◀ 0.31254800013266504 {"method":"Network.requestWillBeSentExtraInfo","params":{"requestId":"83505.3","associatedCookies":[],"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","Host":"phbx-mbp-max:61265","Referer":"http://phbx-mbp-max:61265/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/102.0.5005.61 Safari/537.36"},"connectTiming":{"requestTime":1296259.616474},"clientSecurityState":{"initiatorIsSecureContext":false,"initiatorIPAddressSpace":"Private","privateNetworkRequestPolicy":"Allow"}}}
◀ 0.31296400004066527 {"method":"Runtime.executionContextsCleared","params":{}}
◀ 0.31331400014460087 {"method":"Page.frameNavigated","params":{"frame":{"id":"390907ABC8D0E73ED254F0A353EE75EB","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","url":"http://phbx-mbp-max:61265/","domainAndRegistry":"","securityOrigin":"http://phbx-mbp-max:61265","mimeType":"text/html","adFrameStatus":{"adFrameType":"none"},"secureContextType":"InsecureScheme","crossOriginIsolatedContextType":"NotIsolated","gatedAPIFeatures":[]},"type":"Navigation"}}
◀ 0.31348600005730987 {"method":"DOM.documentUpdated","params":{}}
◀ 0.31383700016885996 {"method":"Network.requestWillBeSent","params":{"requestId":"83505.2","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","documentURL":"http://phbx-mbp-max:61265/","request":{"url":"http://phbx-mbp-max:61265/assets/application-4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7.css","method":"GET","headers":{"Referer":"http://phbx-mbp-max:61265/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/102.0.5005.61 Safari/537.36"},"mixedContentType":"none","initialPriority":"VeryHigh","referrerPolicy":"strict-origin-when-cross-origin","isLinkPreload":true,"isSameSite":true},"timestamp":1296259.616202,"wallTime":1654601790.581647,"initiator":{"type":"other"},"redirectHasExtraInfo":false,"type":"Stylesheet","frameId":"390907ABC8D0E73ED254F0A353EE75EB","hasUserGesture":false}}
◀ 0.3143510001245886 {"method":"Network.dataReceived","params":{"requestId":"E6BA76DD931022EF6D3C542DFCA3805B","timestamp":1296259.616291,"dataLength":998,"encodedDataLength":0}}
◀ 0.3145870000589639 {"method":"Network.requestWillBeSent","params":{"requestId":"83505.3","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","documentURL":"http://phbx-mbp-max:61265/","request":{"url":"http://phbx-mbp-max:61265/assets/application-ed50a619d932f47e07cd2707b1f82b95ffb6918866460165452586658955869a.js","method":"GET","headers":{"Referer":"http://phbx-mbp-max:61265/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/102.0.5005.61 Safari/537.36"},"mixedContentType":"none","initialPriority":"Low","referrerPolicy":"strict-origin-when-cross-origin","isSameSite":true},"timestamp":1296259.616362,"wallTime":1654601790.581797,"initiator":{"type":"parser","url":"http://phbx-mbp-max:61265/","lineNumber":7,"columnNumber":146},"redirectHasExtraInfo":false,"type":"Script","frameId":"390907ABC8D0E73ED254F0A353EE75EB","hasUserGesture":false}}
◀ 0.3147690000478178 {"method":"Runtime.executionContextCreated","params":{"context":{"id":2,"origin":"http://phbx-mbp-max:61265","name":"","uniqueId":"-3104711015246218103.6175852432510102446","auxData":{"isDefault":true,"type":"default","frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}}}
◀ 0.31490200012922287 {"method":"Network.loadingFinished","params":{"requestId":"E6BA76DD931022EF6D3C542DFCA3805B","timestamp":1296259.614805,"encodedDataLength":1597,"shouldReportCorbBlocking":false}}
◀ 0.3150640001986176 {"method":"Network.responseReceivedExtraInfo","params":{"requestId":"83505.2","blockedCookies":[],"headers":{"Cache-Control":"public, max-age=31536000, immutable","Content-Length":"24856","Content-Type":"text/css; charset=utf-8","ETag":"\"4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7\"","X-Request-Id":"bfb05fe8-085e-4a9d-8762-77b42737ee96","X-Runtime":"0.001098"},"resourceIPAddressSpace":"Private","statusCode":200,"headersText":"HTTP/1.1 200 OK\r\nContent-Type: text/css; charset=utf-8\r\nCache-Control: public, max-age=31536000, immutable\r\nETag: \"4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7\"\r\nX-Request-Id: bfb05fe8-085e-4a9d-8762-77b42737ee96\r\nX-Runtime: 0.001098\r\nContent-Length: 24856\r\n\r\n"}}
◀ 0.31511300010606647 {"method":"Network.responseReceived","params":{"requestId":"83505.2","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","timestamp":1296259.618446,"type":"Stylesheet","response":{"url":"http://phbx-mbp-max:61265/assets/application-4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7.css","status":200,"statusText":"OK","headers":{"X-Runtime":"0.001098","Cache-Control":"public, max-age=31536000, immutable","ETag":"\"4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7\"","Content-Length":"24856","X-Request-Id":"bfb05fe8-085e-4a9d-8762-77b42737ee96","Content-Type":"text/css; charset=utf-8"},"mimeType":"text/css","connectionReused":true,"connectionId":14,"remoteIPAddress":"192.168.1.56","remotePort":61265,"fromDiskCache":false,"fromServiceWorker":false,"fromPrefetchCache":false,"encodedDataLength":280,"timing":{"requestTime":1296259.616338,"proxyStart":-1,"proxyEnd":-1,"dnsStart":-1,"dnsEnd":-1,"connectStart":-1,"connectEnd":-1,"sslStart":-1,"sslEnd":-1,"workerStart":-1,"workerReady":-1,"workerFetchStart":-1,"workerRespondWithSettled":-1,"sendStart":0.086,"sendEnd":0.107,"pushStart":0,"pushEnd":0,"receiveHeadersEnd":1.947},"responseTime":1.654601790583686e+12,"protocol":"http/1.1","securityState":"insecure"},"hasExtraInfo":true,"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}
◀ 0.31532700010575354 {"method":"Network.dataReceived","params":{"requestId":"83505.2","timestamp":1296259.618635,"dataLength":24856,"encodedDataLength":24856}}
◀ 0.3154300001915544 {"method":"Network.loadingFinished","params":{"requestId":"83505.2","timestamp":1296259.618584,"encodedDataLength":25136,"shouldReportCorbBlocking":false}}
◀ 0.3155670000705868 {"method":"Network.responseReceivedExtraInfo","params":{"requestId":"83505.3","blockedCookies":[],"headers":{"Cache-Control":"public, max-age=31536000, immutable","Content-Length":"229188","Content-Type":"application/javascript","ETag":"\"ed50a619d932f47e07cd2707b1f82b95ffb6918866460165452586658955869a\"","X-Request-Id":"1b220b61-0918-48f5-afe2-87a58f4ea71f","X-Runtime":"0.000709"},"resourceIPAddressSpace":"Private","statusCode":200,"headersText":"HTTP/1.1 200 OK\r\nContent-Type: application/javascript\r\nCache-Control: public, max-age=31536000, immutable\r\nETag: \"ed50a619d932f47e07cd2707b1f82b95ffb6918866460165452586658955869a\"\r\nX-Request-Id: 1b220b61-0918-48f5-afe2-87a58f4ea71f\r\nX-Runtime: 0.000709\r\nContent-Length: 229188\r\n\r\n"}}
◀ 0.31572200008668005 {"method":"Network.responseReceived","params":{"requestId":"83505.3","loaderId":"E6BA76DD931022EF6D3C542DFCA3805B","timestamp":1296259.619818,"type":"Script","response":{"url":"http://phbx-mbp-max:61265/assets/application-ed50a619d932f47e07cd2707b1f82b95ffb6918866460165452586658955869a.js","status":200,"statusText":"OK","headers":{"X-Runtime":"0.000709","Cache-Control":"public, max-age=31536000, immutable","ETag":"\"ed50a619d932f47e07cd2707b1f82b95ffb6918866460165452586658955869a\"","Content-Length":"229188","X-Request-Id":"1b220b61-0918-48f5-afe2-87a58f4ea71f","Content-Type":"application/javascript"},"mimeType":"application/javascript","connectionReused":false,"connectionId":24,"remoteIPAddress":"192.168.1.56","remotePort":61265,"fromDiskCache":false,"fromServiceWorker":false,"fromPrefetchCache":false,"encodedDataLength":280,"timing":{"requestTime":1296259.616474,"proxyStart":-1,"proxyEnd":-1,"dnsStart":0.028,"dnsEnd":0.031,"connectStart":0.031,"connectEnd":0.315,"sslStart":-1,"sslEnd":-1,"workerStart":-1,"workerReady":-1,"workerFetchStart":-1,"workerRespondWithSettled":-1,"sendStart":0.337,"sendEnd":0.359,"pushStart":0,"pushEnd":0,"receiveHeadersEnd":3.193},"responseTime":1.654601790585069e+12,"protocol":"http/1.1","securityState":"insecure"},"hasExtraInfo":true,"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}
◀ 0.3157670001965016 {"method":"Network.dataReceived","params":{"requestId":"83505.3","timestamp":1296259.619862,"dataLength":131072,"encodedDataLength":0}}
◀ 0.316128000151366 {"method":"Network.dataReceived","params":{"requestId":"83505.3","timestamp":1296259.621289,"dataLength":98116,"encodedDataLength":229188}}
◀ 0.31764900009147823 {"method":"Network.loadingFinished","params":{"requestId":"83505.3","timestamp":1296259.619929,"encodedDataLength":229468,"shouldReportCorbBlocking":false}}
◀ 0.3346780000720173 {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"390907ABC8D0E73ED254F0A353EE75EB","type":"page","title":"App","url":"http://phbx-mbp-max:61265/","attached":true,"canAccessOpener":false,"browserContextId":"AA92867CEEF588645CFFBE7D7F72685A"}}}
◀ 0.3369010000023991 {"method":"Page.navigatedWithinDocument","params":{"frameId":"390907ABC8D0E73ED254F0A353EE75EB","url":"http://phbx-mbp-max:61265/"}}
◀ 0.33697200007736683 {"method":"DOM.documentUpdated","params":{}}
◀ 0.33705400000326335 {"method":"Page.domContentEventFired","params":{"timestamp":1296259.641211}}
◀ 0.3374080001376569 {"method":"CSS.styleSheetAdded","params":{"header":{"styleSheetId":"83505.0","frameId":"390907ABC8D0E73ED254F0A353EE75EB","sourceURL":"http://phbx-mbp-max:61265/assets/application-4396e2a28f384d8cd9ffaa45cf5a8e4757108dad77e392c86a3eeadec06db4a7.css","origin":"regular","title":"","ownerNode":3,"disabled":false,"isInline":false,"isMutable":false,"isConstructed":false,"startLine":0,"startColumn":0,"length":24856,"endLine":1175,"endColumn":0}}}
◀ 0.33744400017894804 {"method":"CSS.styleSheetAdded","params":{"header":{"styleSheetId":"83505.1","frameId":"390907ABC8D0E73ED254F0A353EE75EB","sourceURL":"","origin":"regular","title":"","ownerNode":2,"disabled":false,"isInline":false,"isMutable":false,"isConstructed":false,"startLine":0,"startColumn":0,"length":245,"endLine":13,"endColumn":0}}}
◀ 0.3374570000451058 {"method":"Page.loadEventFired","params":{"timestamp":1296259.642161}}
◀ 0.3375210000667721 {"method":"Page.frameStoppedLoading","params":{"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}
▶ 0.33778699999675155 {"method":"DOM.getDocument","params":{"depth":0},"id":1014}
◀ 0.33818099997006357 {"id":1014,"result":{"root":{"nodeId":1,"backendNodeId":4,"nodeType":9,"nodeName":"#document","localName":"","nodeValue":"","childNodeCount":2,"documentURL":"http://phbx-mbp-max:61265/","baseURL":"http://phbx-mbp-max:61265/","xmlVersion":"","compatibilityMode":"NoQuirksMode"}}}
▶ 0.3388740001246333 {"method":"Runtime.callFunctionOn","params":{"executionContextId":2,"functionDeclaration":"function() { return _cuprite.find(arguments[0], arguments[1]) }","arguments":[{"value":"xpath"},{"value":"/html"}]},"id":1015}
◀ 0.3393570000771433 {"id":1015,"result":{"result":{"type":"object","subtype":"array","className":"Array","description":"Array(1)","objectId":"-3415722321493358315.2.1"}}}
▶ 0.3396290000528097 {"method":"Runtime.callFunctionOn","params":{"objectId":"-3415722321493358315.2.1","returnByValue":true,"functionDeclaration":"function() {\n if (Array.isArray(this) \u0026\u0026\n this.every(e =\u003e e instanceof Node)) {\n return false;\n }\n\n function detectCycle(obj, seen) {\n if (typeof obj === \"object\") {\n if (seen.indexOf(obj) !== -1) {\n return true;\n }\n for (let key in obj) {\n if (obj.hasOwnProperty(key) \u0026\u0026 detectCycle(obj[key], seen.concat([obj]))) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n return detectCycle(this, []);\n}\n"},"id":1016}
◀ 0.34006000007502735 {"id":1016,"result":{"result":{"type":"boolean","value":false}}}
▶ 0.3497990001924336 {"method":"Runtime.getProperties","params":{"ownProperties":true,"objectId":"-3415722321493358315.2.1"},"id":1017}
◀ 0.3502540001645684 {"id":1017,"result":{"result":[{"name":"0","value":{"type":"object","subtype":"node","className":"HTMLHtmlElement","description":"html","objectId":"-3415722321493358315.2.2"},"writable":true,"configurable":true,"enumerable":true,"isOwn":true},{"name":"length","value":{"type":"number","value":1,"description":"1"},"writable":true,"configurable":false,"enumerable":false,"isOwn":true}],"internalProperties":[{"name":"[[Prototype]]","value":{"type":"object","subtype":"array","className":"Array","description":"Array(0)","objectId":"-3415722321493358315.2.3"}}]}}
▶ 0.35992499999701977 {"method":"DOM.requestNode","params":{"objectId":"-3415722321493358315.2.2"},"id":1018}
◀ 0.36025999998673797 {"method":"DOM.setChildNodes","params":{"parentId":1,"nodes":[{"nodeId":2,"parentId":1,"backendNodeId":5,"nodeType":10,"nodeName":"html","localName":"","nodeValue":"","publicId":"","systemId":""},{"nodeId":3,"parentId":1,"backendNodeId":6,"nodeType":1,"nodeName":"HTML","localName":"html","nodeValue":"","childNodeCount":2,"attributes":[],"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}]}}
◀ 0.36027800012379885 {"id":1018,"result":{"nodeId":3}}
▶ 0.370062000118196 {"method":"DOM.describeNode","params":{"nodeId":3},"id":1019}
◀ 0.37040300015360117 {"id":1019,"result":{"node":{"nodeId":0,"backendNodeId":6,"nodeType":1,"nodeName":"HTML","localName":"html","nodeValue":"","childNodeCount":2,"attributes":[],"frameId":"390907ABC8D0E73ED254F0A353EE75EB"}}}
▶ 0.37066600006073713 {"method":"DOM.resolveNode","params":{"nodeId":3},"id":1020}
◀ 0.37091000005602837 {"id":1020,"result":{"object":{"type":"object","subtype":"node","className":"HTMLHtmlElement","description":"html","objectId":"-3415722321493358315.2.4"}}}
▶ 0.3809880001936108 {"method":"Runtime.callFunctionOn","params":{"returnByValue":true,"objectId":"-3415722321493358315.2.4","functionDeclaration":"function() { return _cuprite.isVisible(this) }","arguments":[]},"id":1021}
◀ 0.38150000013411045 {"id":1021,"result":{"result":{"type":"boolean","value":true}}}
▶ 0.38938000006601214 {"method":"DOM.resolveNode","params":{"nodeId":3},"id":1022}
◀ 0.38975000008940697 {"id":1022,"result":{"object":{"type":"object","subtype":"node","className":"HTMLHtmlElement","description":"html","objectId":"-3415722321493358315.2.5"}}}
▶ 0.389968000119552 {"method":"Runtime.callFunctionOn","params":{"returnByValue":true,"objectId":"-3415722321493358315.2.5","functionDeclaration":"function() { return _cuprite.visibleText(this) }","arguments":[]},"id":1023}
◀ 0.3904399999883026 {"id":1023,"result":{"result":{"type":"string","value":"Welcome\nHello World From StimulusController!\n\nThis page is found in app/views/static/index.html"}}}
Cuprite execution paused. Press enter (or run 'kill -CONT 83366') to continue.
objc[83525]: Class WebSwapCGLLayer is implemented in both /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/Frameworks/libANGLE-shared.dylib (0x2265b31a8) and /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/102.0.5005.61/Libraries/libGLESv2.dylib (0x109cf1368). One of the two will be used. Which one is undefined.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment