Best JavaScript code snippet using playwright-internal
ReactDOMLegacy.js
Source:ReactDOMLegacy.js
1/**2 * Copyright (c) Facebook, Inc. and its affiliates.3 *4 * This source code is licensed under the MIT license found in the5 * LICENSE file in the root directory of this source tree.6 *7 * @flow8 */9import type {Container} from './ReactDOMHostConfig';10import type {RootType} from './ReactDOMRoot';11import type {ReactNodeList} from 'shared/ReactTypes';12import {13 getInstanceFromNode,14 isContainerMarkedAsRoot,15 unmarkContainerAsRoot,16} from './ReactDOMComponentTree';17import {createLegacyRoot, isValidContainer} from './ReactDOMRoot';18import {ROOT_ATTRIBUTE_NAME} from '../shared/DOMProperty';19import {20 DOCUMENT_NODE,21 ELEMENT_NODE,22 COMMENT_NODE,23} from '../shared/HTMLNodeType';24import {25 findHostInstanceWithNoPortals,26 updateContainer,27 unbatchedUpdates,28 getPublicRootInstance,29 findHostInstance,30 findHostInstanceWithWarning,31} from 'react-reconciler/src/ReactFiberReconciler';32import getComponentName from 'shared/getComponentName';33import invariant from 'shared/invariant';34import ReactSharedInternals from 'shared/ReactSharedInternals';35import {has as hasInstance} from 'shared/ReactInstanceMap';36const ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;37let topLevelUpdateWarnings;38let warnedAboutHydrateAPI = false;39if (__DEV__) {40 topLevelUpdateWarnings = (container: Container) => {41 if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {42 const hostInstance = findHostInstanceWithNoPortals(43 container._reactRootContainer._internalRoot.current,44 );45 if (hostInstance) {46 if (hostInstance.parentNode !== container) {47 console.error(48 'render(...): It looks like the React-rendered content of this ' +49 'container was removed without using React. This is not ' +50 'supported and will cause errors. Instead, call ' +51 'ReactDOM.unmountComponentAtNode to empty a container.',52 );53 }54 }55 }56 const isRootRenderedBySomeReact = !!container._reactRootContainer;57 const rootEl = getReactRootElementInContainer(container);58 const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));59 if (hasNonRootReactChild && !isRootRenderedBySomeReact) {60 console.error(61 'render(...): Replacing React-rendered children with a new root ' +62 'component. If you intended to update the children of this node, ' +63 'you should instead have the existing children update their state ' +64 'and render the new components instead of calling ReactDOM.render.',65 );66 }67 if (68 container.nodeType === ELEMENT_NODE &&69 ((container: any): Element).tagName &&70 ((container: any): Element).tagName.toUpperCase() === 'BODY'71 ) {72 console.error(73 'render(): Rendering components directly into document.body is ' +74 'discouraged, since its children are often manipulated by third-party ' +75 'scripts and browser extensions. This may lead to subtle ' +76 'reconciliation issues. Try rendering into a container element created ' +77 'for your app.',78 );79 }80 };81}82function getReactRootElementInContainer(container: any) {83 if (!container) {84 return null;85 }86 if (container.nodeType === DOCUMENT_NODE) {87 return container.documentElement;88 } else {89 return container.firstChild;90 }91}92function shouldHydrateDueToLegacyHeuristic(container) {93 const rootElement = getReactRootElementInContainer(container);94 return !!(95 rootElement &&96 rootElement.nodeType === ELEMENT_NODE &&97 rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME)98 );99}100function legacyCreateRootFromDOMContainer(101 container: Container,102 forceHydrate: boolean,103): RootType {104 const shouldHydrate =105 forceHydrate || shouldHydrateDueToLegacyHeuristic(container);106 // First clear any existing content.107 if (!shouldHydrate) {108 let warned = false;109 let rootSibling;110 while ((rootSibling = container.lastChild)) {111 // r dev112 container.removeChild(rootSibling);113 }114 }115 // r dev116 return createLegacyRoot(117 container,118 shouldHydrate119 ? {120 hydrate: true,121 }122 : undefined,123 );124}125function legacyRenderSubtreeIntoContainer(126 parentComponent: ?React$Component<any, any>,127 children: ReactNodeList,128 container: Container,129 forceHydrate: boolean,130 callback: ?Function,131) {132 // r dev133 // TODO: Without `any` type, Flow says "Property cannot be accessed on any134 // member of intersection type." Whyyyyyy.135 let root: RootType = (container._reactRootContainer: any);136 let fiberRoot;137 if (!root) {138 // Initial mount139 root = container._reactRootContainer = legacyCreateRootFromDOMContainer(140 container,141 forceHydrate,142 );143 fiberRoot = root._internalRoot;144 if (typeof callback === 'function') {145 const originalCallback = callback;146 callback = function() {147 const instance = getPublicRootInstance(fiberRoot);148 originalCallback.call(instance);149 };150 }151 // Initial mount should not be batched.152 unbatchedUpdates(() => {153 updateContainer(children, fiberRoot, parentComponent, callback);154 });155 } else {156 fiberRoot = root._internalRoot;157 if (typeof callback === 'function') {158 const originalCallback = callback;159 callback = function() {160 const instance = getPublicRootInstance(fiberRoot);161 originalCallback.call(instance);162 };163 }164 // Update165 updateContainer(children, fiberRoot, parentComponent, callback);166 }167 return getPublicRootInstance(fiberRoot);168}169export function findDOMNode(170 componentOrElement: Element | ?React$Component<any, any>,171): null | Element | Text {172 if (__DEV__) {173 const owner = (ReactCurrentOwner.current: any);174 if (owner !== null && owner.stateNode !== null) {175 const warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;176 if (!warnedAboutRefsInRender) {177 console.error(178 '%s is accessing findDOMNode inside its render(). ' +179 'render() should be a pure function of props and state. It should ' +180 'never access something that requires stale data from the previous ' +181 'render, such as refs. Move this logic to componentDidMount and ' +182 'componentDidUpdate instead.',183 getComponentName(owner.type) || 'A component',184 );185 }186 owner.stateNode._warnedAboutRefsInRender = true;187 }188 }189 if (componentOrElement == null) {190 return null;191 }192 if ((componentOrElement: any).nodeType === ELEMENT_NODE) {193 return (componentOrElement: any);194 }195 if (__DEV__) {196 return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');197 }198 return findHostInstance(componentOrElement);199}200export function hydrate(201 element: React$Node,202 container: Container,203 callback: ?Function,204) {205 invariant(206 isValidContainer(container),207 'Target container is not a DOM element.',208 );209 if (__DEV__) {210 const isModernRoot =211 isContainerMarkedAsRoot(container) &&212 container._reactRootContainer === undefined;213 if (isModernRoot) {214 console.error(215 'You are calling ReactDOM.hydrate() on a container that was previously ' +216 'passed to ReactDOM.createRoot(). This is not supported. ' +217 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?',218 );219 }220 }221 // TODO: throw or warn if we couldn't hydrate?222 return legacyRenderSubtreeIntoContainer(223 null,224 element,225 container,226 true,227 callback,228 );229}230export function render(231 element: React$Element<any>,232 container: Container,233 callback: ?Function,234) {235 // r dev236 return legacyRenderSubtreeIntoContainer(237 null,238 element,239 container,240 false,241 callback,242 );243}244export function unstable_renderSubtreeIntoContainer(245 parentComponent: React$Component<any, any>,246 element: React$Element<any>,247 containerNode: Container,248 callback: ?Function,249) {250 invariant(251 isValidContainer(containerNode),252 'Target container is not a DOM element.',253 );254 invariant(255 parentComponent != null && hasInstance(parentComponent),256 'parentComponent must be a valid React Component',257 );258 return legacyRenderSubtreeIntoContainer(259 parentComponent,260 element,261 containerNode,262 false,263 callback,264 );265}266export function unmountComponentAtNode(container: Container) {267 invariant(268 isValidContainer(container),269 'unmountComponentAtNode(...): Target container is not a DOM element.',270 );271 if (__DEV__) {272 const isModernRoot =273 isContainerMarkedAsRoot(container) &&274 container._reactRootContainer === undefined;275 if (isModernRoot) {276 console.error(277 'You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' +278 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?',279 );280 }281 }282 if (container._reactRootContainer) {283 if (__DEV__) {284 const rootEl = getReactRootElementInContainer(container);285 const renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);286 if (renderedByDifferentReact) {287 console.error(288 "unmountComponentAtNode(): The node you're attempting to unmount " +289 'was rendered by another copy of React.',290 );291 }292 }293 // Unmount should not be batched.294 unbatchedUpdates(() => {295 legacyRenderSubtreeIntoContainer(null, null, container, false, () => {296 // $FlowFixMe This should probably use `delete container._reactRootContainer`297 container._reactRootContainer = null;298 unmarkContainerAsRoot(container);299 });300 });301 // If you call unmountComponentAtNode twice in quick succession, you'll302 // get `true` twice. That's probably fine?303 return true;304 } else {305 if (__DEV__) {306 const rootEl = getReactRootElementInContainer(container);307 const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));308 // Check if the container itself is a React root node.309 const isContainerReactRoot =310 container.nodeType === ELEMENT_NODE &&311 isValidContainer(container.parentNode) &&312 !!container.parentNode._reactRootContainer;313 if (hasNonRootReactChild) {314 console.error(315 "unmountComponentAtNode(): The node you're attempting to unmount " +316 'was rendered by React and is not a top-level container. %s',317 isContainerReactRoot318 ? 'You may have accidentally passed in a React root node instead ' +319 'of its container.'320 : 'Instead, have the parent component update its state and ' +321 'rerender in order to remove this component.',322 );323 }324 }325 return false;326 }...
Using AI Code Generation
1const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const page = await browser.newPage();6 const elementHandle = await page.$('div');7 const hasNonRootReactChild = await hasNonRootReactChild(elementHandle);8 console.log(hasNonRootReactChild);9 await browser.close();10})();
Using AI Code Generation
1const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');2const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');3const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');4const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');5const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');6const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');7const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');8const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');9const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');10const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');11const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');12const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');13const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');14const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');15const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');
Using AI Code Generation
1const { hasNonRootReactChild } = require('playwright/lib/server/dom.js');2const { chromium } = require('playwright');3const { ReactSelector } = require('playwright-react-selector');4(async () => {5 const browser = await chromium.launch();6 const page = await browser.newPage();7 const reactSelector = new ReactSelector('h1');8 const reactHandle = await page.waitForSelector(reactSelector);9 const hasChild = await hasNonRootReactChild(reactHandle);10 console.log('hasChild', hasChild);11 await browser.close();12})();13const { test, expect } = require('@playwright/test');14const { ReactSelector } = require('playwright-react-selector');15test('React Selector', async ({ page }) => {16 const reactSelector = new ReactSelector('h1');17 const reactHandle = await page.waitForSelector(reactSelector);18 const hasChild = await reactHandle.hasNonRootReactChild();19 expect(hasChild).toBe(true);20});21 at Object.<anonymous> (test.spec.js:10:15)22 at Object.<anonymous> (test.spec.js:10:15)23 9 | const reactHandle = await page.waitForSelector(reactSelector);24 10 | const hasChild = await reactHandle.hasNonRootReactChild();25 > 11 | expect(hasChild).toBe(true);26 12 | });27 at Object.<anonymous> (test.spec.js:11:19)
Using AI Code Generation
1const { InternalAPI } = require('playwright');2const { hasNonRootReactChild } = InternalAPI.reactUtils;3const { Page } = require('playwright');4const { InternalAPI } = require('playwright');5const { hasNonRootReactChild } = InternalAPI.reactUtils;6const { Page } = require('playwright');7const { InternalAPI } = require('playwright');8const { hasNonRootReactChild } = InternalAPI.reactUtils;9const { Page } = require('playwright');10const { InternalAPI } = require('playwright');11const { hasNonRootReactChild } = InternalAPI.reactUtils;12const { Page } = require('playwright');13const { InternalAPI } = require('playwright');14const { hasNonRootReactChild } = InternalAPI.reactUtils;15const { Page } = require('playwright');16const { InternalAPI } = require('playwright');17const { hasNonRootReactChild } = InternalAPI.reactUtils;18const { Page } = require('playwright');19const { InternalAPI } = require('playwright');20const { hasNonRootReactChild } = InternalAPI.reactUtils;21const { Page } = require('playwright');22const { InternalAPI } = require('playwright');23const { hasNonRootReactChild } = InternalAPI.reactUtils;24const { Page } = require('playwright');25const { InternalAPI } = require('playwright');26const { hasNonRootReactChild } = InternalAPI.reactUtils;27const { Page } = require('playwright');28const { InternalAPI } = require('playwright');29const { hasNonRootReactChild } = InternalAPI.reactUtils;30const { Page } = require('playwright');
Using AI Code Generation
1const { hasNonRootReactChild } = require('playwright/lib/server/domSnapshot');2const { test, expect } = require('@playwright/test');3test('should work', async ({ page }) => {4 const hasReactChild = await page.evaluate(hasNonRootReactChild, page.mainFrame().document);5 expect(hasReactChild).toBe(true);6});
Using AI Code Generation
1const { Playwright } = require('playwright-core');2const playwright = new Playwright({3});4console.log(playwright._internal.hasNonRootReactChild({name: 'div', attributes: {}}));5const { Playwright } = require('playwright-core');6const playwright = new Playwright({7});8console.log(playwright._internal.hasNonRootReactChild({name: 'div', attributes: { 'data-reactroot': 'true' }}));9const { Playwright } = require('playwright-core');10const playwright = new Playwright({11});12console.log(playwright._internal.hasNonRootReactChild({name: 'div', attributes: { 'data-reactroot': 'false' }}));13const { Playwright } = require('playwright-core');14const playwright = new Playwright({
Using AI Code Generation
1const { chromium } = require("playwright");2(async () => {3 const browser = await chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.fill("input[name='name']", "John Doe");7 await page.fill("input[name='email']", "
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!