Introduce page.goBack/page.goForward (#93)
This patch introduces page.goBack/page.goForward methods to navigate the page history. References #89.
This commit is contained in:
parent
98c3894c84
commit
f154d537f7
16
docs/api.md
16
docs/api.md
@ -35,6 +35,8 @@
|
||||
* [page.evaluateOnInitialized(pageFunction, ...args)](#pageevaluateoninitializedpagefunction-args)
|
||||
* [page.focus(selector)](#pagefocusselector)
|
||||
* [page.frames()](#pageframes)
|
||||
* [page.goBack(options)](#pagegobackoptions)
|
||||
* [page.goForward(options)](#pagegoforwardoptions)
|
||||
* [page.httpHeaders()](#pagehttpheaders)
|
||||
* [page.injectFile(filePath)](#pageinjectfilefilepath)
|
||||
* [page.keyboard](#pagekeyboard)
|
||||
@ -343,11 +345,23 @@ This is a shortcut for [page.mainFrame().evaluate()](#frameevaluatefun-args) met
|
||||
#### page.frames()
|
||||
- returns: <[Array]<[Frame]>> An array of all frames attached to the page.
|
||||
|
||||
#### page.goBack(options)
|
||||
- `options` <[Object]> Navigation parameters, same as in [page.navigate](#pagenavigateurl-options).
|
||||
- returns: <[Promise]<[Response]>> Promise which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect. If
|
||||
can not go back, resolves to null.
|
||||
|
||||
Navigate to the previous page in history.
|
||||
|
||||
#### page.goForward(options)
|
||||
- `options` <[Object]> Navigation parameters, same as in [page.navigate](#pagenavigateurl-options).
|
||||
- returns: <[Promise]<[Response]>> Promise which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect. If
|
||||
can not go back, resolves to null.
|
||||
|
||||
Navigate to the next page in history.
|
||||
|
||||
#### page.httpHeaders()
|
||||
- returns: <[Object]> Key-value set of additional http headers which will be sent with every request.
|
||||
|
||||
|
||||
#### page.injectFile(filePath)
|
||||
- `filePath` <[string]> Path to the javascript file to be injected into page.
|
||||
- returns: <[Promise]> Promise which resolves when file gets successfully evaluated in page.
|
||||
|
32
lib/Page.js
32
lib/Page.js
@ -291,7 +291,7 @@ class Page extends EventEmitter {
|
||||
|
||||
/**
|
||||
* @param {!Object=} options
|
||||
* @return {!Promise<?Response>}
|
||||
* @return {!Promise<!Response>}
|
||||
*/
|
||||
async waitForNavigation(options) {
|
||||
const watcher = new NavigatorWatcher(this._client, this._networkManager, options);
|
||||
@ -299,6 +299,36 @@ class Page extends EventEmitter {
|
||||
return responses.get(this.mainFrame().url()) || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!Object=} options
|
||||
* @return {!Promise<?Response>}
|
||||
*/
|
||||
async goBack(options) {
|
||||
return this._go(-1, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!Object=} options
|
||||
* @return {!Promise<?Response>}
|
||||
*/
|
||||
async goForward(options) {
|
||||
return this._go(+1, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!Object=} options
|
||||
* @return {!Promise<?Response>}
|
||||
*/
|
||||
async _go(delta, options) {
|
||||
const history = await this._client.send('Page.getNavigationHistory');
|
||||
const entry = history.entries[history.currentIndex + delta];
|
||||
if (!entry)
|
||||
return null;
|
||||
const result = this.waitForNavigation(options);
|
||||
this._client.send('Page.navigateToHistoryEntry', {entryId: entry.id});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!Page.Viewport} viewport
|
||||
* @return {!Promise}
|
||||
|
18
test/test.js
18
test/test.js
@ -438,6 +438,24 @@ describe('Puppeteer', function() {
|
||||
}));
|
||||
});
|
||||
|
||||
describe('Page.goBack', function() {
|
||||
it('should work', SX(async function() {
|
||||
await page.navigate(EMPTY_PAGE);
|
||||
await page.navigate(PREFIX + '/grid.html');
|
||||
|
||||
let response = await page.goBack();
|
||||
expect(response.ok).toBe(true);
|
||||
expect(response.url).toContain(EMPTY_PAGE);
|
||||
|
||||
response = await page.goForward();
|
||||
expect(response.ok).toBe(true);
|
||||
expect(response.url).toContain('/grid.html');
|
||||
|
||||
response = await page.goForward();
|
||||
expect(response).toBe(null);
|
||||
}));
|
||||
});
|
||||
|
||||
describe('Page.setInPageCallback', function() {
|
||||
it('should work', SX(async function() {
|
||||
await page.setInPageCallback('callController', function(a, b) {
|
||||
|
Loading…
Reference in New Issue
Block a user