This means integration tests no longer need to depend on a $CI_CHROMEDRIVER_VERSION_ARG environment variable to specify which chromedriver version to download to match the locally installed chrome. This was bad DX and not having it specified was not reliable as webdriver-manager would not always download the chromedriver version to work with the locally installed chrome.
webdriver-manager update --gecko=false --standalone=false $CI_CHROMEDRIVER_VERSION_ARG is now replaced with node webdriver-manager-update.js in the root package.json, which checks which version of chrome puppeteer has come bundled with & downloads informs webdriver-manager to download the corresponding chrome driver version.
Integration tests now use "webdriver-manager": "file:../../node_modules/webdriver-manager" so they don't have to waste time calling webdriver-manager update in postinstall
"// resolutions": "Ensure a single version of webdriver-manager which comes from root node_modules that has already run webdriver-manager update",
"resolutions": {
"**/webdriver-manager": "file:../../node_modules/webdriver-manager"
}
This should speed up each integration postinstall by a few seconds.
Further, integration test package.json files link puppeteer via file:../../node_modules/puppeteer which is the ideal situation as the puppeteer post-install won't download chrome if it is already downloaded. In CI, since node_modules is cached it should not need to download Chrome either unless the node_modules cache is busted.
NB: each version of puppeteer comes bundles with a specific version of chrome. Root package.json & yarn.lock currently pull down puppeteer 2.1.0 which comes with chrome 80. See https://github.com/puppeteer/puppeteer#q-which-chromium-version-does-puppeteer-use for more info.
Only two references to CI_CHROMEDRIVER_VERSION_ARG left in integration tests at integration/bazel-schematics/test.sh which I'm not entirely sure how to get rid of it
Use a lightweight puppeteer=>chrome version mapping instead of launching chrome and calling browser.version()
Launching puppeteer headless chrome and calling browser.version() was a heavy-handed approach to determine the Chrome version. A small and easy to update mappings file is a better solution and it means that the `yarn install` step does not require chrome shared libs available on the system for its postinstall step
PR Close #35049
		
	
			
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // @ts-check
 | |
| // Protractor configuration file, see link for more information
 | |
| // https://github.com/angular/protractor/blob/master/lib/config.ts
 | |
| const { SpecReporter } = require('jasmine-spec-reporter');
 | |
| 
 | |
| /**
 | |
|  * @type { import("protractor").Config }
 | |
|  */
 | |
| exports.config = {
 | |
|   allScriptsTimeout: 11000,
 | |
|   specs: [
 | |
|     './src/**/*.e2e-spec.ts'
 | |
|   ],
 | |
|   capabilities: {
 | |
|     browserName: 'chrome',
 | |
|     chromeOptions: {
 | |
|       binary: require('puppeteer').executablePath(),
 | |
|       // See /integration/README.md#browser-tests for more info on these args
 | |
|       args: ['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage', '--hide-scrollbars', '--mute-audio']
 | |
|     },
 | |
|   },
 | |
|   directConnect: true,
 | |
|   baseUrl: 'http://localhost:4200/',
 | |
|   framework: 'jasmine',
 | |
|   jasmineNodeOpts: {
 | |
|     showColors: true,
 | |
|     defaultTimeoutInterval: 30000,
 | |
|     print: function() {}
 | |
|   },
 | |
|   onPrepare() {
 | |
|     require('ts-node').register({
 | |
|       project: require('path').join(__dirname, './tsconfig.json')
 | |
|     });
 | |
|     jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
 | |
|   }
 | |
| }; |