Add sizzle support
Use the same `document` tracking fix/hack as in our CDP driver.
This commit is contained in:
parent
49317d7c19
commit
6c97825295
4 changed files with 17 additions and 8 deletions
14
bidi-test.py
14
bidi-test.py
|
|
@ -5,6 +5,7 @@ import logging
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import bidi
|
import bidi
|
||||||
|
|
@ -58,6 +59,18 @@ class Browser:
|
||||||
|
|
||||||
asyncio.run_coroutine_threadsafe(self.driver.start_session(), self.loop).result()
|
asyncio.run_coroutine_threadsafe(self.driver.start_session(), self.loop).result()
|
||||||
|
|
||||||
|
test_functions = Path("test-functions.js").read_text()
|
||||||
|
self.bidi("script.addPreloadScript", functionDeclaration=f"() => {{ {test_functions} }}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
sizzle_js = (Path(__file__).parent / "node_modules/sizzle/dist/sizzle.js").read_text()
|
||||||
|
# HACK: sizzle tracks document and when we switch frames, it sees the old document
|
||||||
|
# although we execute it in different context.
|
||||||
|
sizzle_js = sizzle_js.replace('context = context || document;', 'context = context || window.document;')
|
||||||
|
self.bidi("script.addPreloadScript", functionDeclaration=f"() => {{ {sizzle_js} }}")
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
asyncio.run_coroutine_threadsafe(self.driver.close(), self.loop).result()
|
asyncio.run_coroutine_threadsafe(self.driver.close(), self.loop).result()
|
||||||
self.loop.call_soon_threadsafe(self.loop.stop)
|
self.loop.call_soon_threadsafe(self.loop.stop)
|
||||||
|
|
@ -196,6 +209,7 @@ try:
|
||||||
b.wait_text("#super-user-indicator", "Limited access")
|
b.wait_text("#super-user-indicator", "Limited access")
|
||||||
|
|
||||||
b.switch_to_frame("cockpit1:localhost/system")
|
b.switch_to_frame("cockpit1:localhost/system")
|
||||||
|
b.wait_visible(".pf-v5-c-alert:contains('Web console is running in limited access mode.')")
|
||||||
b.wait_in_text(".system-configuration", "Join domain")
|
b.wait_in_text(".system-configuration", "Join domain")
|
||||||
|
|
||||||
b.switch_to_top()
|
b.switch_to_top()
|
||||||
|
|
|
||||||
6
bidi.py
6
bidi.py
|
|
@ -127,9 +127,6 @@ class WebdriverBidi:
|
||||||
"log.entryAdded", "browsingContext.domContentLoaded",
|
"log.entryAdded", "browsingContext.domContentLoaded",
|
||||||
])
|
])
|
||||||
|
|
||||||
test_functions = Path("test-functions.js").read_text()
|
|
||||||
await self.bidi("script.addPreloadScript", functionDeclaration=f"() => {{ {test_functions} }}")
|
|
||||||
|
|
||||||
# wait for browser to initialize default context
|
# wait for browser to initialize default context
|
||||||
for _ in range(10):
|
for _ in range(10):
|
||||||
realms = (await self.bidi("script.getRealms"))["realms"]
|
realms = (await self.bidi("script.getRealms"))["realms"]
|
||||||
|
|
@ -193,7 +190,8 @@ class WebdriverBidi:
|
||||||
"""Send a Webdriver BiDi command and return the JSON response"""
|
"""Send a Webdriver BiDi command and return the JSON response"""
|
||||||
|
|
||||||
payload = json.dumps({"id": self.last_id, "method": method, "params": params})
|
payload = json.dumps({"id": self.last_id, "method": method, "params": params})
|
||||||
log_proto.debug("ws ← %r", payload)
|
# avoid log spam for preload scripts
|
||||||
|
log_proto.debug("ws ← %r", method if method == "script.addPreloadScript" else payload)
|
||||||
await self.ws.send_str(payload)
|
await self.ws.send_str(payload)
|
||||||
future = asyncio.get_event_loop().create_future()
|
future = asyncio.get_event_loop().create_future()
|
||||||
self.pending_commands[self.last_id] = future
|
self.pending_commands[self.last_id] = future
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@
|
||||||
"jed": "1.1.1",
|
"jed": "1.1.1",
|
||||||
"qunit": "2.21.1",
|
"qunit": "2.21.1",
|
||||||
"sass": "1.77.8",
|
"sass": "1.77.8",
|
||||||
|
"sizzle": "2.3.10",
|
||||||
"stylelint": "16.7.0",
|
"stylelint": "16.7.0",
|
||||||
"stylelint-config-recommended-scss": "14.0.0",
|
"stylelint-config-recommended-scss": "14.0.0",
|
||||||
"stylelint-config-standard": "36.0.1",
|
"stylelint-config-standard": "36.0.1",
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
window.ph_select = function(sel) {
|
window.ph_select = function(sel) {
|
||||||
if (!window.Sizzle) {
|
|
||||||
return Array.from(document.querySelectorAll(sel));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sel.includes(":contains(")) {
|
if (sel.includes(":contains(")) {
|
||||||
if (!window.Sizzle) {
|
if (!window.Sizzle) {
|
||||||
throw new Error("Using ':contains' when window.Sizzle is not available.");
|
throw new Error("Using ':contains' when window.Sizzle is not available.");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue