feat(webkit): rebaseline Joel's pass all viewport tests PR (#440)

This commit is contained in:
Pavel Feldman 2020-01-09 17:06:06 -08:00 committed by GitHub
parent aa7096d2c7
commit 4d2a503c44
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 15 deletions

View file

@ -82,6 +82,7 @@ type PageState = {
interceptNetwork: boolean | null; interceptNetwork: boolean | null;
offlineMode: boolean | null; offlineMode: boolean | null;
credentials: types.Credentials | null; credentials: types.Credentials | null;
hasTouch: boolean | null;
}; };
export type FileChooser = { export type FileChooser = {
@ -124,7 +125,8 @@ export class Page extends platform.EventEmitter {
cacheEnabled: null, cacheEnabled: null,
interceptNetwork: null, interceptNetwork: null,
offlineMode: null, offlineMode: null,
credentials: null credentials: null,
hasTouch: null
}; };
this.accessibility = new accessibility.Accessibility(delegate.getAccessibilityTree.bind(delegate)); this.accessibility = new accessibility.Accessibility(delegate.getAccessibilityTree.bind(delegate));
this.keyboard = new input.Keyboard(delegate.rawKeyboard); this.keyboard = new input.Keyboard(delegate.rawKeyboard);

View file

@ -114,6 +114,8 @@ export class WKPage implements PageDelegate {
promises.push(session.send('Page.setBypassCSP', { enabled: true })); promises.push(session.send('Page.setBypassCSP', { enabled: true }));
if (this._page._state.extraHTTPHeaders !== null) if (this._page._state.extraHTTPHeaders !== null)
promises.push(this._setExtraHTTPHeaders(session, this._page._state.extraHTTPHeaders)); promises.push(this._setExtraHTTPHeaders(session, this._page._state.extraHTTPHeaders));
if (this._page._state.hasTouch)
promises.push(session.send('Page.setTouchEmulationEnabled', { enabled: true }));
await Promise.all(promises).catch(e => { await Promise.all(promises).catch(e => {
if (session.isDisposed()) if (session.isDisposed())
return; return;
@ -318,12 +320,15 @@ export class WKPage implements PageDelegate {
} }
async setViewport(viewport: types.Viewport): Promise<void> { async setViewport(viewport: types.Viewport): Promise<void> {
if (viewport.isLandscape || viewport.hasTouch)
throw new Error('Not implemented');
const width = viewport.width; const width = viewport.width;
const height = viewport.height; const height = viewport.height;
const fixedLayout = !!viewport.isMobile; const fixedLayout = !!viewport.isMobile;
await this._pageProxySession.send('Emulation.setDeviceMetricsOverride', {width, height, fixedLayout, deviceScaleFactor: viewport.deviceScaleFactor || 1 }); const deviceScaleFactor = viewport.deviceScaleFactor || 1;
this._page._state.hasTouch = !!viewport.hasTouch;
await Promise.all([
this._pageProxySession.send('Emulation.setDeviceMetricsOverride', {width, height, fixedLayout, deviceScaleFactor }),
this._session.send('Page.setTouchEmulationEnabled', { enabled: !!viewport.hasTouch }),
]);
} }
setCacheEnabled(enabled: boolean): Promise<void> { setCacheEnabled(enabled: boolean): Promise<void> {

View file

@ -219,7 +219,7 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROME
expect(error.message).toBe('No node found for selector: button.does-not-exist'); expect(error.message).toBe('No node found for selector: button.does-not-exist');
}); });
// @see https://github.com/GoogleChrome/puppeteer/issues/161 // @see https://github.com/GoogleChrome/puppeteer/issues/161
it.skip(WEBKIT)('should not hang with touch-enabled viewports', async({page, server}) => { it('should not hang with touch-enabled viewports', async({page, server}) => {
await page.setViewport(playwright.devices['iPhone 6'].viewport); await page.setViewport(playwright.devices['iPhone 6'].viewport);
await page.mouse.down(); await page.mouse.down();
await page.mouse.move(100, 10); await page.mouse.move(100, 10);

View file

@ -28,7 +28,7 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROME
await page.setViewport({width: 123, height: 456}); await page.setViewport({width: 123, height: 456});
expect(page.viewport()).toEqual({width: 123, height: 456}); expect(page.viewport()).toEqual({width: 123, height: 456});
}); });
it.skip(WEBKIT)('should support mobile emulation', async({page, server}) => { it('should support mobile emulation', async({page, server}) => {
await page.goto(server.PREFIX + '/mobile.html'); await page.goto(server.PREFIX + '/mobile.html');
expect(await page.evaluate(() => window.innerWidth)).toBe(800); expect(await page.evaluate(() => window.innerWidth)).toBe(800);
await page.setViewport(iPhone.viewport); await page.setViewport(iPhone.viewport);
@ -36,7 +36,7 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROME
await page.setViewport({width: 400, height: 300}); await page.setViewport({width: 400, height: 300});
expect(await page.evaluate(() => window.innerWidth)).toBe(400); expect(await page.evaluate(() => window.innerWidth)).toBe(400);
}); });
it.skip(WEBKIT)('should support touch emulation', async({page, server}) => { it('should support touch emulation', async({page, server}) => {
await page.goto(server.PREFIX + '/mobile.html'); await page.goto(server.PREFIX + '/mobile.html');
expect(await page.evaluate(() => 'ontouchstart' in window)).toBe(false); expect(await page.evaluate(() => 'ontouchstart' in window)).toBe(false);
await page.setViewport(iPhone.viewport); await page.setViewport(iPhone.viewport);
@ -58,25 +58,26 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROME
return promise; return promise;
} }
}); });
it.skip(WEBKIT)('should be detectable by Modernizr', async({page, server}) => { it('should be detectable by Modernizr', async({page, server}) => {
await page.goto(server.PREFIX + '/detect-touch.html'); await page.goto(server.PREFIX + '/detect-touch.html');
expect(await page.evaluate(() => document.body.textContent.trim())).toBe('NO'); expect(await page.evaluate(() => document.body.textContent.trim())).toBe('NO');
await page.setViewport(iPhone.viewport); await page.setViewport(iPhone.viewport);
await page.goto(server.PREFIX + '/detect-touch.html'); await page.goto(server.PREFIX + '/detect-touch.html');
expect(await page.evaluate(() => document.body.textContent.trim())).toBe('YES'); expect(await page.evaluate(() => document.body.textContent.trim())).toBe('YES');
}); });
it.skip(WEBKIT)('should detect touch when applying viewport with touches', async({page, server}) => { it('should detect touch when applying viewport with touches', async({page, server}) => {
await page.setViewport({ width: 800, height: 600, hasTouch: true }); await page.setViewport({ width: 800, height: 600, hasTouch: true });
await page.addScriptTag({url: server.PREFIX + '/modernizr.js'}); await page.addScriptTag({url: server.PREFIX + '/modernizr.js'});
expect(await page.evaluate(() => Modernizr.touchevents)).toBe(true); expect(await page.evaluate(() => Modernizr.touchevents)).toBe(true);
}); });
it.skip(FFOX || WEBKIT)('should support landscape emulation', async({page, server}) => { it.skip(FFOX)('should support landscape emulation', async({page, server}) => {
await page.goto(server.PREFIX + '/mobile.html'); await page.goto(server.PREFIX + '/mobile.html');
expect(await page.evaluate(() => screen.orientation.type)).toBe('portrait-primary'); await page.setViewport(iPhone.viewport);
expect(await page.evaluate(() => matchMedia('(orientation: landscape)').matches)).toBe(false);
await page.setViewport(iPhoneLandscape.viewport); await page.setViewport(iPhoneLandscape.viewport);
expect(await page.evaluate(() => screen.orientation.type)).toBe('landscape-primary'); expect(await page.evaluate(() => matchMedia('(orientation: landscape)').matches)).toBe(true)
await page.setViewport({width: 100, height: 100}); await page.setViewport({width: 100, height: 100});
expect(await page.evaluate(() => screen.orientation.type)).toBe('portrait-primary'); expect(await page.evaluate(() => matchMedia('(orientation: landscape)').matches)).toBe(false);
}); });
it.skip(FFOX || WEBKIT)('should fire orientationchange event', async({page, server}) => { it.skip(FFOX || WEBKIT)('should fire orientationchange event', async({page, server}) => {
await page.goto(server.PREFIX + '/mobile.html'); await page.goto(server.PREFIX + '/mobile.html');
@ -107,13 +108,13 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROME
}); });
describe('Page.emulate', function() { describe('Page.emulate', function() {
it.skip(WEBKIT)('should work', async({newPage, server}) => { it('should work', async({newPage, server}) => {
const page = await newPage({ viewport: iPhone.viewport, userAgent: iPhone.userAgent }); const page = await newPage({ viewport: iPhone.viewport, userAgent: iPhone.userAgent });
await page.goto(server.PREFIX + '/mobile.html'); await page.goto(server.PREFIX + '/mobile.html');
expect(await page.evaluate(() => window.innerWidth)).toBe(375); expect(await page.evaluate(() => window.innerWidth)).toBe(375);
expect(await page.evaluate(() => navigator.userAgent)).toContain('iPhone'); expect(await page.evaluate(() => navigator.userAgent)).toContain('iPhone');
}); });
it.skip(WEBKIT)('should support clicking', async({newPage, server}) => { it('should support clicking', async({newPage, server}) => {
const page = await newPage({ viewport: iPhone.viewport, userAgent: iPhone.userAgent }); const page = await newPage({ viewport: iPhone.viewport, userAgent: iPhone.userAgent });
await page.goto(server.PREFIX + '/input/button.html'); await page.goto(server.PREFIX + '/input/button.html');
const button = await page.$('button'); const button = await page.$('button');