Set a default timeout for all "waitfor" methods (#34756) (#34829)

This commit is contained in:
Joel Griffith 2019-04-10 08:03:49 -07:00 committed by GitHub
parent 62cfb2eecf
commit af5e7c8941
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 6 deletions

View file

@ -20,10 +20,11 @@ const compactWhitespace = (str) => {
};
export class HeadlessChromiumDriverFactory {
constructor(binaryPath, logger, browserConfig) {
constructor(binaryPath, logger, browserConfig, queueTimeout) {
this.binaryPath = binaryPath;
this.logger = logger.clone(['chromium-driver-factory']);
this.browserConfig = browserConfig;
this.queueTimeout = queueTimeout;
}
type = 'chromium';
@ -80,6 +81,12 @@ export class HeadlessChromiumDriverFactory {
});
page = await browser.newPage();
// All navigation/waitFor methods default to 30 seconds,
// which can cause the job to fail even if we bump timeouts in
// the config. Help alleviate errors like
// "TimeoutError: waiting for selector ".application" failed: timeout 30000ms exceeded"
page.setDefaultTimeout(this.queueTimeout);
} catch (err) {
observer.error(new Error(`Error spawning Chromium browser: ${err}`));
throw err;

View file

@ -8,10 +8,10 @@ import { HeadlessChromiumDriverFactory } from './driver_factory';
export { paths } from './paths';
export async function createDriverFactory(binaryPath, logger, browserConfig) {
export async function createDriverFactory(binaryPath, logger, browserConfig, queueTimeout) {
if (browserConfig.disableSandbox) {
logger.warning(`Enabling the Chromium sandbox provides an additional layer of protection.`);
}
return new HeadlessChromiumDriverFactory(binaryPath, logger, browserConfig);
return new HeadlessChromiumDriverFactory(binaryPath, logger, browserConfig, queueTimeout);
}

View file

@ -17,13 +17,14 @@ export async function createBrowserDriverFactory(server) {
const BROWSER_TYPE = CAPTURE_CONFIG.browser.type;
const BROWSER_AUTO_DOWNLOAD = CAPTURE_CONFIG.browser.autoDownload;
const BROWSER_CONFIG = CAPTURE_CONFIG.browser[BROWSER_TYPE];
const REPORTING_TIMEOUT = config.get('xpack.reporting.queue.timeout');
if (BROWSER_AUTO_DOWNLOAD) {
await ensureBrowserDownloaded(BROWSER_TYPE);
}
try {
const browserDriverFactory = await installBrowser(logger, BROWSER_CONFIG, BROWSER_TYPE, DATA_DIR);
const browserDriverFactory = await installBrowser(logger, BROWSER_CONFIG, BROWSER_TYPE, DATA_DIR, REPORTING_TIMEOUT);
logger.debug(`Browser installed at ${browserDriverFactory.binaryPath}`);
return browserDriverFactory;
} catch (error) {

View file

@ -22,7 +22,7 @@ const chmod = promisify(fs.chmod);
* @param {String} installsPath
* @return {Promise<undefined>}
*/
export async function installBrowser(logger, browserConfig, browserType, installsPath) {
export async function installBrowser(logger, browserConfig, browserType, installsPath, queueTimeout) {
const browser = BROWSERS_BY_TYPE[browserType];
const pkg = browser.paths.packages.find(p => p.platforms.includes(process.platform));
@ -40,5 +40,5 @@ export async function installBrowser(logger, browserConfig, browserType, install
await chmod(binaryPath, '755');
}
return browser.createDriverFactory(binaryPath, logger, browserConfig);
return browser.createDriverFactory(binaryPath, logger, browserConfig, queueTimeout);
}