feat(webkit): sendCharacter
This commit is contained in:
parent
a216063829
commit
d5aac044ca
20
install.js
20
install.js
|
|
@ -18,6 +18,7 @@
|
||||||
if (require('./package.json').name === 'playwright-core')
|
if (require('./package.json').name === 'playwright-core')
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const browserSkips = {Chromium: false, Firefox: false, WebKit: false};
|
||||||
for (const browser of ['Chromium', 'Firefox', 'WebKit']) {
|
for (const browser of ['Chromium', 'Firefox', 'WebKit']) {
|
||||||
const templates = [
|
const templates = [
|
||||||
`PLAYWRIGHT_SKIP_${browser}_DOWNLOAD`,
|
`PLAYWRIGHT_SKIP_${browser}_DOWNLOAD`,
|
||||||
|
|
@ -28,7 +29,8 @@ for (const browser of ['Chromium', 'Firefox', 'WebKit']) {
|
||||||
for (const varName of varNames) {
|
for (const varName of varNames) {
|
||||||
if (process.env[varName.toUpperCase()]) {
|
if (process.env[varName.toUpperCase()]) {
|
||||||
logPolitely(`**INFO** Skipping ${browser} download. "${varName}" environment variable was found.`);
|
logPolitely(`**INFO** Skipping ${browser} download. "${varName}" environment variable was found.`);
|
||||||
return;
|
browserSkips[browser] = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -47,14 +49,18 @@ if (require('fs').existsSync(require('path').join(__dirname, 'src'))) {
|
||||||
|
|
||||||
(async function() {
|
(async function() {
|
||||||
const {generateWebKitProtocol, generateChromeProtocol} = require('./utils/protocol-types-generator/') ;
|
const {generateWebKitProtocol, generateChromeProtocol} = require('./utils/protocol-types-generator/') ;
|
||||||
|
if (!browserSkips.Chromium) {
|
||||||
|
const chromeRevision = await downloadBrowser('chromium', require('./chromium').createBrowserFetcher({host: downloadHost}));
|
||||||
|
await generateChromeProtocol(chromeRevision);
|
||||||
|
}
|
||||||
|
|
||||||
const chromeRevision = await downloadBrowser('chromium', require('./chromium').createBrowserFetcher({host: downloadHost}));
|
if (!browserSkips.Firefox)
|
||||||
await generateChromeProtocol(chromeRevision);
|
await downloadBrowser('firefox', require('./firefox').createBrowserFetcher({host: downloadHost}));
|
||||||
|
|
||||||
await downloadBrowser('firefox', require('./firefox').createBrowserFetcher({host: downloadHost}));
|
if (!browserSkips.WebKit) {
|
||||||
|
const webkitRevision = await downloadBrowser('webkit', require('./webkit').createBrowserFetcher({host: downloadHost}));
|
||||||
const webkitRevision = await downloadBrowser('webkit', require('./webkit').createBrowserFetcher({host: downloadHost}));
|
await generateWebKitProtocol(webkitRevision);
|
||||||
await generateWebKitProtocol(webkitRevision);
|
}
|
||||||
})();
|
})();
|
||||||
function getRevision(browser) {
|
function getRevision(browser) {
|
||||||
if (browser === 'chromium')
|
if (browser === 'chromium')
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
"playwright": {
|
"playwright": {
|
||||||
"chromium_revision": "706915",
|
"chromium_revision": "706915",
|
||||||
"firefox_revision": "1",
|
"firefox_revision": "1",
|
||||||
"webkit_revision": "1"
|
"webkit_revision": "2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"unit": "node test/test.js",
|
"unit": "node test/test.js",
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ export class Keyboard {
|
||||||
} else {
|
} else {
|
||||||
if (delay)
|
if (delay)
|
||||||
await new Promise(f => setTimeout(f, delay));
|
await new Promise(f => setTimeout(f, delay));
|
||||||
// unsupported character
|
await this.sendCharacter(char);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -179,6 +179,12 @@ export class Keyboard {
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
return restore;
|
return restore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async sendCharacter(text: string) {
|
||||||
|
await this._session.send('Page.insertText', {
|
||||||
|
text
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Mouse {
|
export class Mouse {
|
||||||
|
|
|
||||||
|
|
@ -67,13 +67,13 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
await textarea.press('b');
|
await textarea.press('b');
|
||||||
expect(await page.evaluate(() => document.querySelector('textarea').value)).toBe('a');
|
expect(await page.evaluate(() => document.querySelector('textarea').value)).toBe('a');
|
||||||
});
|
});
|
||||||
it.skip(FFOX || WEBKIT)('ElementHandle.press should support |text| option', async({page, server}) => {
|
it.skip(FFOX)('ElementHandle.press should support |text| option', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
const textarea = await page.$('textarea');
|
const textarea = await page.$('textarea');
|
||||||
await textarea.press('a', {text: 'ё'});
|
await textarea.press('a', {text: 'ё'});
|
||||||
expect(await page.evaluate(() => document.querySelector('textarea').value)).toBe('ё');
|
expect(await page.evaluate(() => document.querySelector('textarea').value)).toBe('ё');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should send a character with sendCharacter', async({page, server}) => {
|
it('should send a character with sendCharacter', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
await page.focus('textarea');
|
await page.focus('textarea');
|
||||||
await page.keyboard.sendCharacter('嗨');
|
await page.keyboard.sendCharacter('嗨');
|
||||||
|
|
@ -102,7 +102,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
expect(await page.evaluate(() => getResult())).toBe('Keyup: ' + modifierKey + ' ' + modifierKey + 'Left ' + codeForKey[modifierKey] + ' []');
|
expect(await page.evaluate(() => getResult())).toBe('Keyup: ' + modifierKey + ' ' + modifierKey + 'Left ' + codeForKey[modifierKey] + ' []');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should report multiple modifiers', async({page, server}) => {
|
it('should report multiple modifiers', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/keyboard.html');
|
await page.goto(server.PREFIX + '/input/keyboard.html');
|
||||||
const keyboard = page.keyboard;
|
const keyboard = page.keyboard;
|
||||||
await keyboard.down('Control');
|
await keyboard.down('Control');
|
||||||
|
|
@ -118,7 +118,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
await keyboard.up('Alt');
|
await keyboard.up('Alt');
|
||||||
expect(await page.evaluate(() => getResult())).toBe('Keyup: Alt AltLeft 18 []');
|
expect(await page.evaluate(() => getResult())).toBe('Keyup: Alt AltLeft 18 []');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should send proper codes while typing', async({page, server}) => {
|
it('should send proper codes while typing', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/keyboard.html');
|
await page.goto(server.PREFIX + '/input/keyboard.html');
|
||||||
await page.keyboard.type('!');
|
await page.keyboard.type('!');
|
||||||
expect(await page.evaluate(() => getResult())).toBe(
|
expect(await page.evaluate(() => getResult())).toBe(
|
||||||
|
|
@ -143,7 +143,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
'Keyup: ~ Backquote 192 [Shift]'].join('\n'));
|
'Keyup: ~ Backquote 192 [Shift]'].join('\n'));
|
||||||
await keyboard.up('Shift');
|
await keyboard.up('Shift');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should not type canceled events', async({page, server}) => {
|
it('should not type canceled events', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
await page.focus('textarea');
|
await page.focus('textarea');
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
|
|
@ -159,7 +159,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
await page.keyboard.type('Hello World!');
|
await page.keyboard.type('Hello World!');
|
||||||
expect(await page.evaluate(() => textarea.value)).toBe('He Wrd!');
|
expect(await page.evaluate(() => textarea.value)).toBe('He Wrd!');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should specify repeat property', async({page, server}) => {
|
it('should specify repeat property', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
await page.focus('textarea');
|
await page.focus('textarea');
|
||||||
await page.evaluate(() => document.querySelector('textarea').addEventListener('keydown', e => window.lastEvent = e, true));
|
await page.evaluate(() => document.querySelector('textarea').addEventListener('keydown', e => window.lastEvent = e, true));
|
||||||
|
|
@ -177,7 +177,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
await page.keyboard.down('a');
|
await page.keyboard.down('a');
|
||||||
expect(await page.evaluate(() => window.lastEvent.repeat)).toBe(false);
|
expect(await page.evaluate(() => window.lastEvent.repeat)).toBe(false);
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should type all kinds of characters', async({page, server}) => {
|
it('should type all kinds of characters', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
await page.focus('textarea');
|
await page.focus('textarea');
|
||||||
const text = 'This text goes onto two lines.\nThis character is 嗨.';
|
const text = 'This text goes onto two lines.\nThis character is 嗨.';
|
||||||
|
|
@ -203,7 +203,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
await textarea.press('NumpadSubtract');
|
await textarea.press('NumpadSubtract');
|
||||||
expect(await page.evaluate('keyLocation')).toBe(3);
|
expect(await page.evaluate('keyLocation')).toBe(3);
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should throw on unknown keys', async({page, server}) => {
|
it('should throw on unknown keys', async({page, server}) => {
|
||||||
let error = await page.keyboard.press('NotARealKey').catch(e => e);
|
let error = await page.keyboard.press('NotARealKey').catch(e => e);
|
||||||
expect(error.message).toBe('Unknown key: "NotARealKey"');
|
expect(error.message).toBe('Unknown key: "NotARealKey"');
|
||||||
|
|
||||||
|
|
@ -213,12 +213,12 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
error = await page.keyboard.press('😊').catch(e => e);
|
error = await page.keyboard.press('😊').catch(e => e);
|
||||||
expect(error && error.message).toBe('Unknown key: "😊"');
|
expect(error && error.message).toBe('Unknown key: "😊"');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should type emoji', async({page, server}) => {
|
it('should type emoji', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/textarea.html');
|
await page.goto(server.PREFIX + '/input/textarea.html');
|
||||||
await page.type('textarea', '👹 Tokyo street Japan 🇯🇵');
|
await page.type('textarea', '👹 Tokyo street Japan 🇯🇵');
|
||||||
expect(await page.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵');
|
expect(await page.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should type emoji into an iframe', async({page, server}) => {
|
it('should type emoji into an iframe', async({page, server}) => {
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
await utils.attachFrame(page, 'emoji-test', server.PREFIX + '/input/textarea.html');
|
await utils.attachFrame(page, 'emoji-test', server.PREFIX + '/input/textarea.html');
|
||||||
const frame = page.frames()[1];
|
const frame = page.frames()[1];
|
||||||
|
|
@ -226,7 +226,7 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
|
||||||
await textarea.type('👹 Tokyo street Japan 🇯🇵');
|
await textarea.type('👹 Tokyo street Japan 🇯🇵');
|
||||||
expect(await frame.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵');
|
expect(await frame.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵');
|
||||||
});
|
});
|
||||||
it.skip(WEBKIT)('should press the meta key', async({page}) => {
|
it('should press the meta key', async({page}) => {
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
window.result = null;
|
window.result = null;
|
||||||
document.addEventListener('keydown', event => {
|
document.addEventListener('keydown', event => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue