mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
Improve Phantom_Shim to handle more scenarios. (#49)
This patch improves phantom_shim: - introduce WebPage.loading/WebPage.loadingProgress - improve compatibility of WebPage.onInitialized. This allows to pass phantomjs tests, even though the implementation is hacky. - teach PhantomResponse about "stage" state which could be either "start" or "end" - unskip a bunch of phantom webpage tests: - webpage/change-request-encoded-url - webpage/loading.js - webpage/long-running-javascript.js - webpage/modify-header.js - webpage/on-initialized.js - webpage/remove-header.js
This commit is contained in:
parent
2cd60c9e1e
commit
4372674c99
@ -39,12 +39,14 @@ class WebPage {
|
|||||||
if (options.viewportSize)
|
if (options.viewportSize)
|
||||||
await(this._page.setViewportSize(options.viewportSize));
|
await(this._page.setViewportSize(options.viewportSize));
|
||||||
|
|
||||||
|
this.loading = false;
|
||||||
|
this.loadingProgress = 0;
|
||||||
this.clipRect = options.clipRect || {left: 0, top: 0, width: 0, height: 0};
|
this.clipRect = options.clipRect || {left: 0, top: 0, width: 0, height: 0};
|
||||||
this.onConsoleMessage = null;
|
this.onConsoleMessage = null;
|
||||||
this.onLoadFinished = null;
|
this.onLoadFinished = null;
|
||||||
this.onResourceError = null;
|
this.onResourceError = null;
|
||||||
this.onResourceReceived = null;
|
this.onResourceReceived = null;
|
||||||
this.onInitialized = null;
|
this._onInitialized = undefined;
|
||||||
this._deferEvaluate = false;
|
this._deferEvaluate = false;
|
||||||
|
|
||||||
this.libraryPath = path.dirname(scriptPath);
|
this.libraryPath = path.dirname(scriptPath);
|
||||||
@ -56,6 +58,7 @@ class WebPage {
|
|||||||
|
|
||||||
this._pageEvents = new AsyncEmitter(this._page);
|
this._pageEvents = new AsyncEmitter(this._page);
|
||||||
this._pageEvents.on(PageEvents.Response, response => this._onResponseReceived(response));
|
this._pageEvents.on(PageEvents.Response, response => this._onResponseReceived(response));
|
||||||
|
this._pageEvents.on(PageEvents.RequestFinished, request => this._onRequestFinished(request));
|
||||||
this._pageEvents.on(PageEvents.RequestFailed, event => (this.onResourceError || noop).call(null, event));
|
this._pageEvents.on(PageEvents.RequestFailed, event => (this.onResourceError || noop).call(null, event));
|
||||||
this._pageEvents.on(PageEvents.ConsoleMessage, msg => (this.onConsoleMessage || noop).call(null, msg));
|
this._pageEvents.on(PageEvents.ConsoleMessage, msg => (this.onConsoleMessage || noop).call(null, msg));
|
||||||
this._pageEvents.on(PageEvents.Confirm, message => this._onConfirm(message));
|
this._pageEvents.on(PageEvents.Confirm, message => this._onConfirm(message));
|
||||||
@ -64,6 +67,17 @@ class WebPage {
|
|||||||
this._pageEvents.on(PageEvents.Error, error => (this._onError || noop).call(null, error.message, error.stack));
|
this._pageEvents.on(PageEvents.Error, error => (this._onError || noop).call(null, error.message, error.stack));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get onInitialized() {
|
||||||
|
return this._onInitialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
set onInitialized(value) {
|
||||||
|
if (typeof value !== 'function')
|
||||||
|
this._onInitialized = undefined;
|
||||||
|
else
|
||||||
|
this._onInitialized = value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {?function(!Object, !Request)}
|
* @return {?function(!Object, !Request)}
|
||||||
*/
|
*/
|
||||||
@ -95,7 +109,14 @@ class WebPage {
|
|||||||
_onResponseReceived(response) {
|
_onResponseReceived(response) {
|
||||||
if (!this.onResourceReceived)
|
if (!this.onResourceReceived)
|
||||||
return;
|
return;
|
||||||
let phantomResponse = new PhantomResponse(response);
|
let phantomResponse = new PhantomResponse(response, false /* isResponseFinished */);
|
||||||
|
this.onResourceReceived.call(null, phantomResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onRequestFinished(request) {
|
||||||
|
if (!this.onResourceReceived)
|
||||||
|
return;
|
||||||
|
let phantomResponse = new PhantomResponse(request.response(), true /* isResponseFinished */);
|
||||||
this.onResourceReceived.call(null, phantomResponse);
|
this.onResourceReceived.call(null, phantomResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,10 +257,14 @@ class WebPage {
|
|||||||
open(url, callback) {
|
open(url, callback) {
|
||||||
console.assert(arguments.length <= 2, 'WebPage.open does not support METHOD and DATA arguments');
|
console.assert(arguments.length <= 2, 'WebPage.open does not support METHOD and DATA arguments');
|
||||||
this._deferEvaluate = true;
|
this._deferEvaluate = true;
|
||||||
if (typeof this.onInitialized === 'function')
|
if (typeof this._onInitialized === 'function')
|
||||||
this.onInitialized();
|
this._onInitialized();
|
||||||
this._deferEvaluate = false;
|
this._deferEvaluate = false;
|
||||||
|
this.loading = true;
|
||||||
|
this.loadingProgress = 50;
|
||||||
this._page.navigate(url).then(result => {
|
this._page.navigate(url).then(result => {
|
||||||
|
this.loadingProgress = 100;
|
||||||
|
this.loading = false;
|
||||||
let status = result ? 'success' : 'fail';
|
let status = result ? 'success' : 'fail';
|
||||||
if (!result) {
|
if (!result) {
|
||||||
this.onResourceError.call(null, {
|
this.onResourceError.call(null, {
|
||||||
@ -251,6 +276,7 @@ class WebPage {
|
|||||||
this.onLoadFinished.call(null, status);
|
this.onLoadFinished.call(null, status);
|
||||||
if (callback)
|
if (callback)
|
||||||
callback.call(null, status);
|
callback.call(null, status);
|
||||||
|
this.loadingProgress = 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,11 +388,13 @@ class PhantomRequest {
|
|||||||
class PhantomResponse {
|
class PhantomResponse {
|
||||||
/**
|
/**
|
||||||
* @param {!Response} response
|
* @param {!Response} response
|
||||||
|
* @param {boolean} isResponseFinished
|
||||||
*/
|
*/
|
||||||
constructor(response) {
|
constructor(response, isResponseFinished) {
|
||||||
this.url = response.url;
|
this.url = response.url;
|
||||||
this.status = response.status;
|
this.status = response.status;
|
||||||
this.statusText = response.statusText;
|
this.statusText = response.statusText;
|
||||||
|
this.stage = isResponseFinished ? 'end' : 'start';
|
||||||
this.headers = [];
|
this.headers = [];
|
||||||
for (let entry of response.headers.entries()) {
|
for (let entry of response.headers.entries()) {
|
||||||
this.headers.push({
|
this.headers.push({
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
//! unsupported
|
|
||||||
var webpage = require('webpage');
|
var webpage = require('webpage');
|
||||||
|
|
||||||
async_test(function () {
|
async_test(function () {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
//! unsupported
|
|
||||||
async_test(function () {
|
async_test(function () {
|
||||||
var webpage = require('webpage');
|
var webpage = require('webpage');
|
||||||
var page = webpage.create();
|
var page = webpage.create();
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
//! unsupported
|
|
||||||
async_test(function () {
|
async_test(function () {
|
||||||
var page = require('webpage').create();
|
var page = require('webpage').create();
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
//! unsupported
|
|
||||||
async_test(function () {
|
async_test(function () {
|
||||||
var webpage = require('webpage');
|
var webpage = require('webpage');
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
//! unsupported
|
|
||||||
test(function () {
|
test(function () {
|
||||||
var page = require('webpage').create();
|
var page = require('webpage').create();
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
//! unsupported
|
|
||||||
var webpage = require('webpage');
|
var webpage = require('webpage');
|
||||||
|
|
||||||
// NOTE: HTTP header names are case-insensitive. Our test server
|
// NOTE: HTTP header names are case-insensitive. Our test server
|
||||||
|
Loading…
Reference in New Issue
Block a user