Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 69 additions & 111 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,59 +81,58 @@ afterAll(SX(async function() {
]);
}));

describe('Browser', function() {
it('Browser.Options.ignoreHTTPSErrors', SX(async function() {
const options = Object.assign({ignoreHTTPSErrors: true}, defaultBrowserOptions);
const browser = await puppeteer.launch(options);
const page = await browser.newPage();
let error = null;
let response = null;
try {
response = await page.goto(HTTPS_PREFIX + '/empty.html');
} catch (e) {
error = e;
}
expect(error).toBe(null);
expect(response.ok).toBe(true);
browser.close();
}));
it('should reject all promises when browser is closed', SX(async function() {
const browser = await puppeteer.launch(defaultBrowserOptions);
const page = await browser.newPage();
let error = null;
const neverResolves = page.evaluate(() => new Promise(r => {})).catch(e => error = e);
browser.close();
await neverResolves;
expect(error.message).toContain('Protocol error');
}));
it('Puppeteer.connect', SX(async function() {
const originalBrowser = await puppeteer.launch(defaultBrowserOptions);
const browser = await puppeteer.connect({
browserWSEndpoint: originalBrowser.wsEndpoint()
});
const page = await browser.newPage();
expect(await page.evaluate(() => 7 * 8)).toBe(56);
originalBrowser.close();
}));
it('userDataDir option', SX(async function() {
const userDataDir = fs.mkdtempSync(path.join(__dirname, 'test-user-data-dir'));
const options = Object.assign({userDataDir}, defaultBrowserOptions);
const browser = await puppeteer.launch(options);
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
browser.close();
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
rm(userDataDir);
}));
it('userDataDir argument', SX(async function() {
const userDataDir = fs.mkdtempSync(path.join(__dirname, 'test-user-data-dir'));
const options = Object.assign({}, defaultBrowserOptions);
options.args = [`--user-data-dir=${userDataDir}`].concat(options.args);
const browser = await puppeteer.launch(options);
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
browser.close();
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
rm(userDataDir);
}));
describe('Puppeteer', function() {
describe('Puppeteer.launch', function() {
it('should support ignoreHTTPSErrors option', SX(async function() {
const options = Object.assign({ignoreHTTPSErrors: true}, defaultBrowserOptions);
const browser = await puppeteer.launch(options);
const page = await browser.newPage();
let error = null;
const response = await page.goto(HTTPS_PREFIX + '/empty.html').catch(e => error = e);
expect(error).toBe(null);
expect(response.ok).toBe(true);
browser.close();
}));
it('should reject all promises when browser is closed', SX(async function() {
const browser = await puppeteer.launch(defaultBrowserOptions);
const page = await browser.newPage();
let error = null;
const neverResolves = page.evaluate(() => new Promise(r => {})).catch(e => error = e);
browser.close();
await neverResolves;
expect(error.message).toContain('Protocol error');
}));
it('userDataDir option', SX(async function() {
const userDataDir = fs.mkdtempSync(path.join(__dirname, 'test-user-data-dir'));
const options = Object.assign({userDataDir}, defaultBrowserOptions);
const browser = await puppeteer.launch(options);
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
browser.close();
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
rm(userDataDir);
}));
it('userDataDir argument', SX(async function() {
const userDataDir = fs.mkdtempSync(path.join(__dirname, 'test-user-data-dir'));
const options = Object.assign({}, defaultBrowserOptions);
options.args = [`--user-data-dir=${userDataDir}`].concat(options.args);
const browser = await puppeteer.launch(options);
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
browser.close();
expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0);
rm(userDataDir);
}));
});
describe('Puppeteer.connect', function() {
it('should work', SX(async function() {
const originalBrowser = await puppeteer.launch(defaultBrowserOptions);
const browser = await puppeteer.connect({
browserWSEndpoint: originalBrowser.wsEndpoint()
});
const page = await browser.newPage();
expect(await page.evaluate(() => 7 * 8)).toBe(56);
originalBrowser.close();
}));
});
});

describe('Page', function() {
Expand Down Expand Up @@ -176,11 +175,7 @@ describe('Page', function() {
const neverResolves = newPage.evaluate(() => new Promise(r => {}));
newPage.close();
let error = null;
try {
await neverResolves;
} catch (e) {
error = e;
}
await neverResolves.catch(e => error = e);
expect(error.message).toContain('Protocol error');
}));
});
Expand Down Expand Up @@ -216,11 +211,7 @@ describe('Page', function() {
}));
it('should reject promise with exception', SX(async function() {
let error = null;
try {
await page.evaluate(() => not.existing.object.property);
} catch (e) {
error = e;
}
await page.evaluate(() => not.existing.object.property).catch(e => error = e);
expect(error).toBeTruthy();
expect(error.message).toContain('not is not defined');
}));
Expand Down Expand Up @@ -455,12 +446,9 @@ describe('Page', function() {
document.querySelector = null;
});
await page.goto(EMPTY_PAGE);
try {
await page.waitForSelector('*');
fail('Failed waitForSelector did not throw.');
} catch (e) {
expect(e.message).toContain('document.querySelector is not a function');
}
let error = null;
await page.waitForSelector('*').catch(e => error = e);
expect(error.message).toContain('document.querySelector is not a function');
}));
it('should throw when frame is detached', SX(async function() {
await FrameUtils.attachFrame(page, 'frame1', EMPTY_PAGE);
Expand Down Expand Up @@ -532,12 +520,9 @@ describe('Page', function() {
await watchdog;
}));
it('should throw when unknown type', SX(async function() {
try {
await page.waitFor({foo: 'bar'});
fail('Failed to throw exception');
} catch (e) {
expect(e.message).toContain('Unsupported target type');
}
let error = null;
await page.waitFor({foo: 'bar'}).catch(e => error = e);
expect(error.message).toContain('Unsupported target type');
}));
});

Expand Down Expand Up @@ -595,11 +580,7 @@ describe('Page', function() {
}));
it('should fail when navigating to bad url', SX(async function() {
let error = null;
try {
await page.goto('asdfasdf');
} catch (e) {
error = e;
}
await page.goto('asdfasdf').catch(e => error = e);
expect(error.message).toContain('Cannot navigate to invalid URL');
}));
it('should fail when navigating to bad SSL', SX(async function() {
Expand All @@ -609,20 +590,12 @@ describe('Page', function() {
page.on('requestfinished', request => expect(request).toBeTruthy());
page.on('requestfailed', request => expect(request).toBeTruthy());
let error = null;
try {
await page.goto(HTTPS_PREFIX + '/empty.html');
} catch (e) {
error = e;
}
await page.goto(HTTPS_PREFIX + '/empty.html').catch(e => error = e);
expect(error.message).toContain('SSL Certificate error');
}));
it('should fail when main resources failed to load', SX(async function() {
let error = null;
try {
await page.goto('http://localhost:44123/non-existing-url');
} catch (e) {
error = e;
}
await page.goto('http://localhost:44123/non-existing-url').catch(e => error = e);
expect(error.message).toContain('Failed to navigate');
}));
it('should fail when exceeding maximum navigation timeout', SX(async function() {
Expand Down Expand Up @@ -903,11 +876,7 @@ describe('Page', function() {
await page.setRequestInterceptionEnabled(true);
page.on('request', request => request.abort());
let error = null;
try {
await page.goto(EMPTY_PAGE);
} catch (e) {
error = e;
}
await page.goto(EMPTY_PAGE).catch(e => error = e);
expect(error).toBeTruthy();
expect(error.message).toContain('Failed to navigate');
}));
Expand Down Expand Up @@ -1240,12 +1209,9 @@ describe('Page', function() {
}));
it('should fail to click a missing button', SX(async function() {
await page.goto(PREFIX + '/input/button.html');
try {
await page.click('button.does-not-exist');
fail('Clicking the button did not throw.');
} catch (error) {
expect(error.message).toBe('No node found for selector: button.does-not-exist');
}
let error = null;
await page.click('button.does-not-exist').catch(e => error = e);
expect(error.message).toBe('No node found for selector: button.does-not-exist');
}));
// @see https://github.com/GoogleChrome/puppeteer/issues/161
it('should not hang with touch-enabled viewports', SX(async function() {
Expand Down Expand Up @@ -1843,11 +1809,7 @@ describe('Page', function() {
await page.setJavaScriptEnabled(false);
await page.goto('data:text/html, <script>var something = "forbidden"</script>');
let error = null;
try {
await page.evaluate('something');
} catch (e) {
error = e;
}
await page.evaluate('something').catch(e => error = e);
expect(error.message).toContain('something is not defined');

await page.setJavaScriptEnabled(true);
Expand Down Expand Up @@ -2052,11 +2014,7 @@ describe('Page', function() {
await page.tracing.start({path: outputFile});
const newPage = await browser.newPage();
let error = null;
try {
await newPage.tracing.start({path: outputFile});
} catch (e) {
error = e;
}
await newPage.tracing.start({path: outputFile}).catch(e => error = e);
await newPage.close();
expect(error).toBeTruthy();
await page.tracing.stop();
Expand Down