main
js 108 lines 3 KB
Raw
1 'use strict';
2
3 /** @flow */
4
5 async function clickButton(page, buttonTestName) {
6 await page.evaluate(testName => {
7 const {createTestNameSelector, findAllNodes} = window.REACT_DOM_DEVTOOLS;
8 const container = document.getElementById('devtools');
9
10 const button = findAllNodes(container, [
11 createTestNameSelector(testName),
12 ])[0];
13 button.click();
14 }, buttonTestName);
15 }
16
17 async function getElementCount(page, displayName) {
18 return await page.evaluate(listItemText => {
19 const {createTestNameSelector, createTextSelector, findAllNodes} =
20 window.REACT_DOM_DEVTOOLS;
21 const container = document.getElementById('devtools');
22 const rows = findAllNodes(container, [
23 createTestNameSelector('ComponentTreeListItem'),
24 createTextSelector(listItemText),
25 ]);
26 return rows.length;
27 }, displayName);
28 }
29
30 async function selectElement(
31 page,
32 displayName,
33 waitForOwnersText,
34 waitForSourceLoaded = false
35 ) {
36 await page.evaluate(listItemText => {
37 const {createTestNameSelector, createTextSelector, findAllNodes} =
38 window.REACT_DOM_DEVTOOLS;
39 const container = document.getElementById('devtools');
40
41 const listItem = findAllNodes(container, [
42 createTestNameSelector('ComponentTreeListItem'),
43 createTextSelector(listItemText),
44 ])[0];
45
46 listItem.dispatchEvent(
47 new MouseEvent('mousedown', {bubbles: true, cancelable: true})
48 );
49 }, displayName);
50
51 if (waitForOwnersText) {
52 // Wait for selected element's props to load.
53 await page.waitForFunction(
54 ({titleText, ownersListText}) => {
55 const {createTestNameSelector, findAllNodes} =
56 window.REACT_DOM_DEVTOOLS;
57 const container = document.getElementById('devtools');
58
59 const title = findAllNodes(container, [
60 createTestNameSelector('InspectedElement-Title'),
61 ])[0];
62
63 const ownersList = findAllNodes(container, [
64 createTestNameSelector('InspectedElementView-Owners'),
65 ])[0];
66
67 if (!ownersList) {
68 return false;
69 }
70
71 const owners = findAllNodes(ownersList, [
72 createTestNameSelector('OwnerView'),
73 ]);
74
75 return (
76 title &&
77 title.innerText.includes(titleText) &&
78 owners &&
79 owners
80 .map(node => node.innerText)
81 .join('\n')
82 .includes(ownersListText)
83 );
84 },
85 {titleText: displayName, ownersListText: waitForOwnersText}
86 );
87 }
88
89 if (waitForSourceLoaded) {
90 await page.waitForFunction(() => {
91 const {createTestNameSelector, findAllNodes} = window.REACT_DOM_DEVTOOLS;
92 const container = document.getElementById('devtools');
93
94 const sourceStringBlock = findAllNodes(container, [
95 createTestNameSelector('InspectedElementView-FormattedSourceString'),
96 ])[0];
97
98 // Wait for a new source line to be fetched
99 return sourceStringBlock != null && sourceStringBlock.innerText != null;
100 });
101 }
102 }
103
104 module.exports = {
105 clickButton,
106 getElementCount,
107 selectElement,
108 };