chrome-test.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const puppeteer = require('puppeteer');
  2. const inspect = require('util').inspect;
  3. const URL = process.argv[2];
  4. async function main() {
  5. /* eslint-disable no-console */
  6. console.info('Starting Chrome Headless');
  7. const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
  8. const page = await browser.newPage();
  9. console.info('Navigating to page:', URL);
  10. await page.goto(URL);
  11. console.info('Waiting for page to load...');
  12. // Wait for the local file to redirect on notebook >= 6.0
  13. await page.waitForNavigation();
  14. const html = await page.content();
  15. if (inspect(html).indexOf('jupyter-config-data') === -1) {
  16. console.error('Error loading JupyterLab page:');
  17. console.error(html);
  18. }
  19. const el = await page.waitForSelector('#browserTest', { timeout: 100000 });
  20. console.log('Waiting for application to start...');
  21. let testError = null;
  22. try {
  23. await page.waitForSelector('.completed');
  24. } catch (e) {
  25. testError = e;
  26. }
  27. const textContent = await el.getProperty('textContent');
  28. const errors = JSON.parse(await textContent.jsonValue());
  29. for (let error of errors) {
  30. console.error(`Parsed an error from text content: ${error.message}`, error);
  31. }
  32. await browser.close();
  33. if (testError) {
  34. throw testError;
  35. }
  36. console.info('Chrome test complete');
  37. }
  38. // Stop the process if an error is raised in the async function.
  39. process.on('unhandledRejection', up => {
  40. throw up;
  41. });
  42. main();