Skip to content

Commit

Permalink
Merge pull request DefinitelyTyped#32723 from SimonSchick/feat/puppet…
Browse files Browse the repository at this point in the history
…eer-v1.12

feat(puppeteer): v1.12
  • Loading branch information
PranavSenthilnathan authored Feb 2, 2019
2 parents f827bdb + 30caf82 commit c214d32
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 29 deletions.
83 changes: 70 additions & 13 deletions types/puppeteer/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Type definitions for puppeteer 1.11
// Type definitions for puppeteer 1.12
// Project: https://github.com/GoogleChrome/puppeteer#readme
// Definitions by: Marvin Hagemeister <https://github.com/marvinhagemeister>
// Christopher Deutsch <https://github.com/cdeutsch>
Expand Down Expand Up @@ -346,10 +346,27 @@ export type ConsoleMessageType = "log"
| "count"
| "timeEnd";

export interface ConsoleMessageLocation {
/**
* URL of the resource if known.
*/
url?: string;
/**
* Line number in the resource if known
*/
lineNumber?: number;
/**
* Column number in the resource if known.
*/
columnNumber?: number;
}

/** ConsoleMessage objects are dispatched by page via the 'console' event. */
export interface ConsoleMessage {
/** The message arguments. */
args(): JSHandle[];
/** The location the message originated from */
location(): ConsoleMessageLocation;
/** The message text. */
text(): string;
type(): ConsoleMessageType;
Expand Down Expand Up @@ -1087,18 +1104,22 @@ export interface Response {
}

export interface WaitForSelectorOptions extends Timeoutable {
/**
* Wait for element to be present in DOM and to be visible,
* i.e. to not have display: none or visibility: hidden CSS properties.
* @default false
*/
visible?: boolean;
/**
* Wait for element to not be found in the DOM or to be hidden,
* i.e. have display: none or visibility: hidden CSS properties.
* @default false
*/
hidden?: boolean;
/**
* Wait for element to be present in DOM and to be visible,
* i.e. to not have display: none or visibility: hidden CSS properties.
* @default false
*/
visible?: boolean;
/**
* Wait for element to not be found in the DOM or to be hidden,
* i.e. have display: none or visibility: hidden CSS properties.
* @default false
*/
hidden?: boolean;
}

export interface WaitForSelectorOptionsHidden extends WaitForSelectorOptions {
hidden: true;
}

export interface FrameBase extends Evalable {
Expand Down Expand Up @@ -1227,6 +1248,7 @@ export interface FrameBase extends Evalable {
/**
* Shortcut for waitForSelector and waitForXPath
*/
waitFor(selector: string, options: WaitForSelectorOptionsHidden): Promise<ElementHandle | null>;
waitFor(selector: string, options?: WaitForSelectorOptions): Promise<ElementHandle>;

/**
Expand Down Expand Up @@ -1257,6 +1279,10 @@ export interface FrameBase extends Evalable {
selector: string,
options?: WaitForSelectorOptions,
): Promise<ElementHandle>;
waitForSelector(
selector: string,
options?: WaitForSelectorOptionsHidden,
): Promise<ElementHandle | null>;

waitForXPath(
xpath: string,
Expand Down Expand Up @@ -1311,6 +1337,8 @@ export interface PageEventObj {
metrics: { title: string, metrics: Metrics };
/** Emitted when an uncaught exception happens within the page. */
pageerror: Error;
/** Emitted when the page opens a new tab or window. */
popup: Page;
/**
* Emitted when a page issues a request. The request object is read-only.
* In order to intercept and mutate requests, see page.setRequestInterceptionEnabled.
Expand Down Expand Up @@ -1523,6 +1551,9 @@ export interface Page extends EventEmitter, FrameBase {
/** Get the browser the page belongs to. */
browser(): Browser;

/** Get the browser context that the page belongs to. */
browserContext(): BrowserContext;

/** Closes the current page. */
close(options?: PageCloseOptions): Promise<void>;

Expand Down Expand Up @@ -1666,6 +1697,25 @@ export interface Page extends EventEmitter, FrameBase {
*/
setDefaultNavigationTimeout(timeout: number): void;

/**
* This setting will change the default maximum time for the following methods and related shortcuts:
* - `page.goBack`
* - `page.goForward`
* - `page.goto`
* - `page.reload`
* - `page.setContent`
* - `page.waitFor`
* - `page.waitForFunction`
* - `page.waitForNavigation`
* - `page.waitForRequest`
* - `page.waitForResponse`
* - `page.waitForSelector`
* - `page.waitForXPath`
*
* NOTE page.setDefaultNavigationTimeout takes priority over page.setDefaultTimeout
*/
setDefaultTimeout(timeout: number): void;

/**
* The extra HTTP headers will be sent with every request the page initiates.
* @param headers An object containing additional http headers to be sent with every request. All header values must be strings.
Expand Down Expand Up @@ -2075,8 +2125,15 @@ export interface BrowserOptions {
}

export interface ConnectOptions extends BrowserOptions {
/**
* A browser url to connect to, in format `http://${host}:${port}`.
* Use interchangeably with browserWSEndpoint to let Puppeteer fetch it from metadata endpoint.
*/
browserURL?: string;

/** A browser websocket endpoint to connect to. */
browserWSEndpoint?: string;

/**
* **Experimental** Specify a custom transport object for Puppeteer to use.
*/
Expand Down
66 changes: 50 additions & 16 deletions types/puppeteer/puppeteer-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import * as Devices from "puppeteer/DeviceDescriptors";
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.setDefaultTimeout(100000);
await page.goto("https://news.ycombinator.com", { waitUntil: "networkidle0" });
await page.pdf({ path: "hn.pdf", format: "A4" });

Expand Down Expand Up @@ -129,7 +130,11 @@ puppeteer.launch().then(async browser => {
interceptedRequest.url().endsWith(".jpg")
)
interceptedRequest.abort();
else interceptedRequest.continue();
else interceptedRequest.continue({
headers: {
dope: 'yes',
}
});
});

page.keyboard.type("Hello"); // Types instantly
Expand Down Expand Up @@ -237,13 +242,13 @@ puppeteer.launch().then(async browser => {
page.type("#myInput", "Hello World!");

page.on("console", (event: puppeteer.ConsoleMessage, ...args: any[]) => {
console.log(event.text, event.type);
console.log(event.text(), event.type(), event.location());
for (let i = 0; i < args.length; ++i) console.log(`${i}: ${args[i]}`);
});

await button.focus();
await button.press("Enter");
await button.screenshot({
const screenshotOpts: puppeteer.BinaryScreenShotOptions = {
type: "jpeg",
omitBackground: true,
clip: {
Expand All @@ -252,7 +257,8 @@ puppeteer.launch().then(async browser => {
width: 200,
height: 100
}
});
};
await button.screenshot(screenshotOpts);
console.log(button.toString());
input.type("Hello World", { delay: 10 });

Expand All @@ -262,11 +268,15 @@ puppeteer.launch().then(async browser => {

const metrics = await page.metrics();
console.log(metrics.Documents, metrics.Frames, metrics.JSEventListeners);
page.on('metrics', data => {
const title: string = data.title;
const metrics: puppeteer.Metrics = data.metrics;
});

const navResponse = await page.waitForNavigation({
timeout: 1000
});
console.log(navResponse.ok, navResponse.status, navResponse.url, navResponse.headers);
console.log(navResponse.ok(), navResponse.status(), navResponse.url(), navResponse.headers()['Content-Type']);

// evaluate example
const bodyHandle = (await page.$('body'))!;
Expand Down Expand Up @@ -309,7 +319,7 @@ puppeteer.launch().then(async browser => {
const elementText = await page.$eval(
'#someElement',
(
element, // $ExpectType Element
element, // $ExpectType Element
) => {
element.innerHTML; // $ExpectType string
return element.innerHTML;
Expand Down Expand Up @@ -340,15 +350,19 @@ puppeteer.launch().then(async browser => {
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const handler = (r: puppeteer.Request) => {
const handler = async (r: puppeteer.Request) => {
const failure = r.failure();

console.log(r.headers().Test);

const response = r.response();
if (!response) {
return;
}
const text: string = response.statusText();
const ip: string = response.remoteAddress().ip;
const data = (await response.json()) as string;
const randomHeader = response.headers().Test;

if (failure == null) {
console.error("Request completed successfully");
Expand Down Expand Up @@ -454,13 +468,16 @@ puppeteer.launch().then(async browser => {
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.waitFor(1000);
await page.waitFor('selector');
await page.waitFor('selector', {
await page.waitFor(1000); // $ExpectType void
const el: puppeteer.ElementHandle = await page.waitFor('selector');
const nullableEl: puppeteer.ElementHandle | null = await page.waitFor('selector', {
hidden: true,
});
const el2: puppeteer.ElementHandle = await page.waitFor('selector', {
timeout: 123,
});
await page.waitFor(() => !!document.querySelector('.foo'), {
hidden: true,
hidden: true,
});
await page.waitFor((stuff: string) => !!document.querySelector(stuff), {
hidden: true,
Expand Down Expand Up @@ -496,11 +513,11 @@ puppeteer.launch().then(async browser => {
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
await page.waitFor('test');
} catch (err) {
console.log(err instanceof TimeoutError);
}
try {
await page.waitFor('test');
} catch (err) {
console.log(err instanceof TimeoutError);
}
});

// domcontentloaded page event test
Expand All @@ -513,3 +530,20 @@ puppeteer.launch().then(async browser => {
});
});
});

// Element access
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const el = await page.$('input');
const val: string = await (await el!.getProperty('type')).jsonValue();
});

// Request manipualtion
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setExtraHTTPHeaders({
a: '1'
});
});

0 comments on commit c214d32

Please sign in to comment.