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(page, displayName, waitForOwnersText) {
    
  31.   await page.evaluate(listItemText => {
    
  32.     const {createTestNameSelector, createTextSelector, findAllNodes} =
    
  33.       window.REACT_DOM_DEVTOOLS;
    
  34.     const container = document.getElementById('devtools');
    
  35. 
    
  36.     const listItem = findAllNodes(container, [
    
  37.       createTestNameSelector('ComponentTreeListItem'),
    
  38.       createTextSelector(listItemText),
    
  39.     ])[0];
    
  40.     listItem.click();
    
  41.   }, displayName);
    
  42. 
    
  43.   if (waitForOwnersText) {
    
  44.     // Wait for selected element's props to load.
    
  45.     await page.waitForFunction(
    
  46.       ({titleText, ownersListText}) => {
    
  47.         const {createTestNameSelector, findAllNodes} =
    
  48.           window.REACT_DOM_DEVTOOLS;
    
  49.         const container = document.getElementById('devtools');
    
  50. 
    
  51.         const title = findAllNodes(container, [
    
  52.           createTestNameSelector('InspectedElement-Title'),
    
  53.         ])[0];
    
  54. 
    
  55.         const ownersList = findAllNodes(container, [
    
  56.           createTestNameSelector('InspectedElementView-Owners'),
    
  57.         ])[0];
    
  58. 
    
  59.         return (
    
  60.           title &&
    
  61.           title.innerText.includes(titleText) &&
    
  62.           ownersList &&
    
  63.           ownersList.innerText.includes(ownersListText)
    
  64.         );
    
  65.       },
    
  66.       {titleText: displayName, ownersListText: waitForOwnersText}
    
  67.     );
    
  68.   }
    
  69. }
    
  70. 
    
  71. module.exports = {
    
  72.   clickButton,
    
  73.   getElementCount,
    
  74.   selectElement,
    
  75. };