mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
fix(adb): enable newPage in mobile browser (#4728)
This commit is contained in:
parent
eecb798356
commit
97be66b15c
@ -316,7 +316,27 @@ export class CRBrowserContext extends BrowserContext {
|
|||||||
|
|
||||||
async newPageDelegate(): Promise<PageDelegate> {
|
async newPageDelegate(): Promise<PageDelegate> {
|
||||||
assertBrowserContextIsNotOwned(this);
|
assertBrowserContextIsNotOwned(this);
|
||||||
const { targetId } = await this._browser._session.send('Target.createTarget', { url: 'about:blank', browserContextId: this._browserContextId });
|
|
||||||
|
const oldKeys = this._browser.isClank() ? new Set(this._browser._crPages.keys()) : undefined;
|
||||||
|
|
||||||
|
let { targetId } = await this._browser._session.send('Target.createTarget', { url: 'about:blank', browserContextId: this._browserContextId });
|
||||||
|
|
||||||
|
if (oldKeys) {
|
||||||
|
// Chrome for Android returns tab ids (1, 2, 3, 4, 5) instead of content target ids here, work around it via the
|
||||||
|
// heuristic assuming that there is only one page created at a time.
|
||||||
|
const newKeys = new Set(this._browser._crPages.keys());
|
||||||
|
// Remove old keys.
|
||||||
|
for (const key of oldKeys)
|
||||||
|
newKeys.delete(key);
|
||||||
|
// Remove potential concurrent popups.
|
||||||
|
for (const key of newKeys) {
|
||||||
|
const page = this._browser._crPages.get(key)!;
|
||||||
|
if (page._opener)
|
||||||
|
newKeys.delete(key);
|
||||||
|
}
|
||||||
|
assert(newKeys.size === 1);
|
||||||
|
[ targetId ] = [...newKeys];
|
||||||
|
}
|
||||||
return this._browser._crPages.get(targetId)!;
|
return this._browser._crPages.get(targetId)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,4 +29,13 @@ if (process.env.PW_ANDROID_TESTS) {
|
|||||||
expect(await page.title()).toBe('Hello world!');
|
expect(await page.title()).toBe('Hello world!');
|
||||||
await context.close();
|
await context.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should create new page', async function({ device }) {
|
||||||
|
const context = await device.launchBrowser();
|
||||||
|
const page = await context.newPage();
|
||||||
|
await page.goto('data:text/html,<title>Hello world!</title>');
|
||||||
|
expect(await page.title()).toBe('Hello world!');
|
||||||
|
await page.close();
|
||||||
|
await context.close();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user