diff --git a/tests/wpt/dom/nodes/Node-appendChild-cereactions-vs-script.window.js b/tests/wpt/dom/nodes/Node-appendChild-cereactions-vs-script.window.js
new file mode 100644
index 00000000..bc0b8ad6
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-appendChild-cereactions-vs-script.window.js
@@ -0,0 +1,27 @@
+const results = [];
+test(() => {
+ class Script1 extends HTMLScriptElement {
+ constructor() {
+ super();
+ }
+ connectedCallback() {
+ results.push("ce connected s1");
+ }
+ }
+ class Script2 extends HTMLScriptElement {
+ constructor() {
+ super();
+ }
+ connectedCallback() {
+ results.push("ce connected s2");
+ }
+ }
+ customElements.define("script-1", Script1, { extends: "script" });
+ customElements.define("script-2", Script2, { extends: "script" });
+ const s1 = new Script1();
+ s1.textContent = "results.push('s1')";
+ const s2 = new Script2();
+ s2.textContent = "results.push('s2')";
+ document.body.append(s1, s2);
+ assert_array_equals(results, ["s1", "s2", "ce connected s1", "ce connected s2"]);
+}, "Custom element reactions follow script execution");
diff --git a/tests/wpt/dom/nodes/Node-appendChild.html b/tests/wpt/dom/nodes/Node-appendChild.html
new file mode 100644
index 00000000..8264cb11
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-appendChild.html
@@ -0,0 +1,59 @@
+
+
+
Node.appendChild
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-baseURI.html b/tests/wpt/dom/nodes/Node-baseURI.html
new file mode 100644
index 00000000..e9e9d76a
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-baseURI.html
@@ -0,0 +1,62 @@
+
+Node.baseURI
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-childNodes.html b/tests/wpt/dom/nodes/Node-childNodes.html
new file mode 100644
index 00000000..0d38df37
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-childNodes.html
@@ -0,0 +1,117 @@
+
+
+Node.childNodes
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-cloneNode-XMLDocument.html b/tests/wpt/dom/nodes/Node-cloneNode-XMLDocument.html
new file mode 100644
index 00000000..2c63c775
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-cloneNode-XMLDocument.html
@@ -0,0 +1,28 @@
+
+
+Cloning of an XMLDocument
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-cloneNode-document-with-doctype.html b/tests/wpt/dom/nodes/Node-cloneNode-document-with-doctype.html
new file mode 100644
index 00000000..21963084
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-cloneNode-document-with-doctype.html
@@ -0,0 +1,51 @@
+
+
+Cloning of a document with a doctype
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html b/tests/wpt/dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html
new file mode 100644
index 00000000..bce6074a
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-cloneNode-external-stylesheet-no-bc.sub.html
@@ -0,0 +1,23 @@
+
+
+cloneNode on a stylesheet link in a browsing-context-less document
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-cloneNode-on-inactive-document-crash.html b/tests/wpt/dom/nodes/Node-cloneNode-on-inactive-document-crash.html
new file mode 100644
index 00000000..cbd7a1e6
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-cloneNode-on-inactive-document-crash.html
@@ -0,0 +1,6 @@
+
+
diff --git a/tests/wpt/dom/nodes/Node-cloneNode-svg.html b/tests/wpt/dom/nodes/Node-cloneNode-svg.html
new file mode 100644
index 00000000..9d4704b0
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-cloneNode-svg.html
@@ -0,0 +1,63 @@
+
+
+Cloning of SVG elements and attributes
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-cloneNode.html b/tests/wpt/dom/nodes/Node-cloneNode.html
new file mode 100644
index 00000000..e97259da
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-cloneNode.html
@@ -0,0 +1,346 @@
+
+
+Node.cloneNode
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-compareDocumentPosition.html b/tests/wpt/dom/nodes/Node-compareDocumentPosition.html
new file mode 100644
index 00000000..afae60aa
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-compareDocumentPosition.html
@@ -0,0 +1,87 @@
+
+Node.compareDocumentPosition() tests
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-constants.html b/tests/wpt/dom/nodes/Node-constants.html
new file mode 100644
index 00000000..33e7c10e
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-constants.html
@@ -0,0 +1,39 @@
+
+Node constants
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-contains-xml.xml b/tests/wpt/dom/nodes/Node-contains-xml.xml
new file mode 100644
index 00000000..f9b20d68
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-contains-xml.xml
@@ -0,0 +1,83 @@
+
+
+
+Node.nodeName
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-contains.html b/tests/wpt/dom/nodes/Node-contains.html
new file mode 100644
index 00000000..c44f072b
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-contains.html
@@ -0,0 +1,36 @@
+
+Node.contains() tests
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-insertBefore.html b/tests/wpt/dom/nodes/Node-insertBefore.html
new file mode 100644
index 00000000..ecb4d183
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-insertBefore.html
@@ -0,0 +1,297 @@
+
+Node.insertBefore
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-isConnected-shadow-dom.html b/tests/wpt/dom/nodes/Node-isConnected-shadow-dom.html
new file mode 100644
index 00000000..7d04dc32
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isConnected-shadow-dom.html
@@ -0,0 +1,29 @@
+
+
+Test of Node.isConnected in a shadow tree
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-isConnected.html b/tests/wpt/dom/nodes/Node-isConnected.html
new file mode 100644
index 00000000..da0b460d
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isConnected.html
@@ -0,0 +1,95 @@
+
+
+
+Node.prototype.isConnected
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-isEqualNode-iframe1.xml b/tests/wpt/dom/nodes/Node-isEqualNode-iframe1.xml
new file mode 100644
index 00000000..8077e73c
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isEqualNode-iframe1.xml
@@ -0,0 +1 @@
+ ]>
diff --git a/tests/wpt/dom/nodes/Node-isEqualNode-iframe2.xml b/tests/wpt/dom/nodes/Node-isEqualNode-iframe2.xml
new file mode 100644
index 00000000..eacc9d17
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isEqualNode-iframe2.xml
@@ -0,0 +1 @@
+ ]>
diff --git a/tests/wpt/dom/nodes/Node-isEqualNode-xhtml.xhtml b/tests/wpt/dom/nodes/Node-isEqualNode-xhtml.xhtml
new file mode 100644
index 00000000..3170643d
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isEqualNode-xhtml.xhtml
@@ -0,0 +1,84 @@
+
+
+Node.isEqualNode
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-isEqualNode.html b/tests/wpt/dom/nodes/Node-isEqualNode.html
new file mode 100644
index 00000000..9ff4c5b0
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isEqualNode.html
@@ -0,0 +1,161 @@
+
+
+Node.prototype.isEqualNode
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-isSameNode.html b/tests/wpt/dom/nodes/Node-isSameNode.html
new file mode 100644
index 00000000..b37442ac
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-isSameNode.html
@@ -0,0 +1,111 @@
+
+
+Node.prototype.isSameNode
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-lookupNamespaceURI.html b/tests/wpt/dom/nodes/Node-lookupNamespaceURI.html
new file mode 100644
index 00000000..925c5283
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-lookupNamespaceURI.html
@@ -0,0 +1,139 @@
+
+
+
+LookupNamespaceURI and IsDefaultNamespace tests
+
+
+
+
+LookupNamespaceURI and IsDefaultNamespace
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-lookupPrefix.xhtml b/tests/wpt/dom/nodes/Node-lookupPrefix.xhtml
new file mode 100644
index 00000000..50a487c5
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-lookupPrefix.xhtml
@@ -0,0 +1,31 @@
+
+
+Node.lookupPrefix
+
+
+
+
+
+TEST
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-mutation-adoptNode.html b/tests/wpt/dom/nodes/Node-mutation-adoptNode.html
new file mode 100644
index 00000000..9c9594c0
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-mutation-adoptNode.html
@@ -0,0 +1,23 @@
+
+
+Node-manipulation-adopted
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-nodeName-xhtml.xhtml b/tests/wpt/dom/nodes/Node-nodeName-xhtml.xhtml
new file mode 100644
index 00000000..bc478af8
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-nodeName-xhtml.xhtml
@@ -0,0 +1,42 @@
+
+
+
+Node.nodeName
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-nodeName.html b/tests/wpt/dom/nodes/Node-nodeName.html
new file mode 100644
index 00000000..911f9345
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-nodeName.html
@@ -0,0 +1,32 @@
+
+Node.nodeName
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-nodeValue.html b/tests/wpt/dom/nodes/Node-nodeValue.html
new file mode 100644
index 00000000..79ce80b8
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-nodeValue.html
@@ -0,0 +1,71 @@
+
+
+Node.nodeValue
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-normalize.html b/tests/wpt/dom/nodes/Node-normalize.html
new file mode 100644
index 00000000..4d455996
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-normalize.html
@@ -0,0 +1,83 @@
+
+Node.normalize()
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-parentElement.html b/tests/wpt/dom/nodes/Node-parentElement.html
new file mode 100644
index 00000000..bc564bee
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-parentElement.html
@@ -0,0 +1,82 @@
+
+Node.parentElement
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-parentNode-iframe.html b/tests/wpt/dom/nodes/Node-parentNode-iframe.html
new file mode 100644
index 00000000..88bc5ab4
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-parentNode-iframe.html
@@ -0,0 +1 @@
+c
\ No newline at end of file
diff --git a/tests/wpt/dom/nodes/Node-parentNode.html b/tests/wpt/dom/nodes/Node-parentNode.html
new file mode 100644
index 00000000..cff61786
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-parentNode.html
@@ -0,0 +1,33 @@
+
+Node.parentNode
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-properties.html b/tests/wpt/dom/nodes/Node-properties.html
new file mode 100644
index 00000000..10f92e7d
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-properties.html
@@ -0,0 +1,688 @@
+
+Node assorted property tests
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-removeChild.html b/tests/wpt/dom/nodes/Node-removeChild.html
new file mode 100644
index 00000000..61584233
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-removeChild.html
@@ -0,0 +1,58 @@
+
+Node.removeChild
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-replaceChild.html b/tests/wpt/dom/nodes/Node-replaceChild.html
new file mode 100644
index 00000000..74aac67d
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-replaceChild.html
@@ -0,0 +1,349 @@
+
+
+Node.replaceChild
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/nodes/Node-textContent.html b/tests/wpt/dom/nodes/Node-textContent.html
new file mode 100644
index 00000000..cf2e0720
--- /dev/null
+++ b/tests/wpt/dom/nodes/Node-textContent.html
@@ -0,0 +1,265 @@
+
+
+Node.textContent
+
+
+
+