diff --git a/packages/playwright-ct-react/registerSource.mjs b/packages/playwright-ct-react/registerSource.mjs
index d5e617785a..10dad4c0db 100644
--- a/packages/playwright-ct-react/registerSource.mjs
+++ b/packages/playwright-ct-react/registerSource.mjs
@@ -40,7 +40,13 @@ function __pwRender(value) {
if (isJsxComponent(v)) {
const component = v;
const props = component.props ? __pwRender(component.props) : {};
- return { result: __pwReact.createElement(/** @type { any } */ (component.type), { ...props, children: undefined }, props.children) };
+ const {children, ...propsWithoutChildren} = props;
+ /** @type {[any, any, any?]} */
+ const createElementArguments = [component.type, propsWithoutChildren];
+ if(children){
+ createElementArguments.push(children);
+ }
+ return { result: __pwReact.createElement(...createElementArguments) };
}
});
}
diff --git a/packages/playwright-ct-react17/registerSource.mjs b/packages/playwright-ct-react17/registerSource.mjs
index 2a13152dce..8dfc1d24e9 100644
--- a/packages/playwright-ct-react17/registerSource.mjs
+++ b/packages/playwright-ct-react17/registerSource.mjs
@@ -40,7 +40,14 @@ function __pwRender(value) {
if (isJsxComponent(v)) {
const component = v;
const props = component.props ? __pwRender(component.props) : {};
- return { result: __pwReact.createElement(/** @type { any } */ (component.type), { ...props, children: undefined }, props.children) };
+
+ const {children, ...propsWithoutChildren} = props;
+ /** @type {[any, any, any?]} */
+ const createElementArguments = [component.type, propsWithoutChildren];
+ if(children){
+ createElementArguments.push(children);
+ }
+ return { result: __pwReact.createElement(...createElementArguments) };
}
});
}
diff --git a/tests/components/ct-react-vite/src/components/CheckChildrenProp.tsx b/tests/components/ct-react-vite/src/components/CheckChildrenProp.tsx
new file mode 100644
index 0000000000..42b3a361e8
--- /dev/null
+++ b/tests/components/ct-react-vite/src/components/CheckChildrenProp.tsx
@@ -0,0 +1,16 @@
+type DefaultChildrenProps = {
+ children?: any;
+}
+
+export default function CheckChildrenProp(props: DefaultChildrenProps) {
+ const content = 'children' in props ? props.children : 'No Children';
+ return
+
Welcome!
+
+ {content}
+
+
+
+}
diff --git a/tests/components/ct-react-vite/tests/children.spec.tsx b/tests/components/ct-react-vite/tests/children.spec.tsx
index 93e1f1af72..d671b14e64 100644
--- a/tests/components/ct-react-vite/tests/children.spec.tsx
+++ b/tests/components/ct-react-vite/tests/children.spec.tsx
@@ -1,5 +1,6 @@
import { test, expect } from '@playwright/experimental-ct-react';
import Button from '@/components/Button';
+import CheckChildrenProp from '@/components/CheckChildrenProp';
import DefaultChildren from '@/components/DefaultChildren';
import MultipleChildren from '@/components/MultipleChildren';
@@ -58,3 +59,8 @@ test('render number as child', async ({ mount }) => {
const component = await mount({1337});
await expect(component).toContainText('1337');
});
+
+test('render without children', async ({ mount }) => {
+ const component = await mount();
+ await expect(component).toContainText('No Children');
+});
diff --git a/tests/components/ct-react17/src/components/CheckChildrenProp.tsx b/tests/components/ct-react17/src/components/CheckChildrenProp.tsx
new file mode 100644
index 0000000000..42b3a361e8
--- /dev/null
+++ b/tests/components/ct-react17/src/components/CheckChildrenProp.tsx
@@ -0,0 +1,16 @@
+type DefaultChildrenProps = {
+ children?: any;
+}
+
+export default function CheckChildrenProp(props: DefaultChildrenProps) {
+ const content = 'children' in props ? props.children : 'No Children';
+ return
+
Welcome!
+
+ {content}
+
+
+
+}
diff --git a/tests/components/ct-react17/tests/children.spec.tsx b/tests/components/ct-react17/tests/children.spec.tsx
index b7751d197d..32ddabe7ac 100644
--- a/tests/components/ct-react17/tests/children.spec.tsx
+++ b/tests/components/ct-react17/tests/children.spec.tsx
@@ -1,5 +1,6 @@
import { test, expect } from '@playwright/experimental-ct-react17';
import Button from '@/components/Button';
+import CheckChildrenProp from '@/components/CheckChildrenProp';
import DefaultChildren from '@/components/DefaultChildren';
import MultipleChildren from '@/components/MultipleChildren';
@@ -58,3 +59,8 @@ test('render number as child', async ({ mount }) => {
const component = await mount({1337});
await expect(component).toContainText('1337');
});
+
+test('render without children', async ({ mount }) => {
+ const component = await mount();
+ await expect(component).toContainText('No Children');
+});