mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat(puppeteer): introduce puppeteer.errors
and puppeteer.devices
(#4312)
These getters are introduced as a more convenient substitute for a `require('puppeteer/Errors')` and `require('puppeteer/DeviceDescriptors')`. This way we can make cross-browser story nicer - a single require of `puppeteer` or `puppeteer-firefox` fully defines Puppeteer environment.
This commit is contained in:
parent
dde55b0257
commit
e3abb0aa32
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2017 Google Inc. All rights reserved.
|
* Copyright 2019 Google Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -14,811 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports = [
|
let asyncawait = true;
|
||||||
{
|
try {
|
||||||
'name': 'Blackberry PlayBook',
|
new Function('async function test(){await 1}');
|
||||||
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
} catch (error) {
|
||||||
'viewport': {
|
asyncawait = false;
|
||||||
'width': 600,
|
}
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 1,
|
// If node does not support async await, use the compiled version.
|
||||||
'isMobile': true,
|
if (asyncawait)
|
||||||
'hasTouch': true,
|
module.exports = require('./lib/DeviceDescriptors');
|
||||||
'isLandscape': false
|
else
|
||||||
}
|
module.exports = require('./node6/lib/DeviceDescriptors');
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Blackberry PlayBook landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 600,
|
|
||||||
'deviceScaleFactor': 1,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'BlackBerry Z30',
|
|
||||||
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'BlackBerry Z30 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note 3',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note 3 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note II',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note II landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S III',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S III landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S5',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S5 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 768,
|
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 768,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Mini',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 768,
|
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Mini landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 768,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Pro',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 1366,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Pro landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1366,
|
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 4',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 480,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 4 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
|
||||||
'viewport': {
|
|
||||||
'width': 480,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 5',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 568,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 5 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 568,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 667,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 667,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6 Plus',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 414,
|
|
||||||
'height': 736,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6 Plus landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 736,
|
|
||||||
'height': 414,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 667,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 667,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7 Plus',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 414,
|
|
||||||
'height': 736,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7 Plus landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 736,
|
|
||||||
'height': 414,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 667,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 667,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8 Plus',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 414,
|
|
||||||
'height': 736,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8 Plus landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 736,
|
|
||||||
'height': 414,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone SE',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 568,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone SE landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 568,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone X',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 812,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone X landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 812,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Kindle Fire HDX',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
|
||||||
'viewport': {
|
|
||||||
'width': 800,
|
|
||||||
'height': 1280,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Kindle Fire HDX landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1280,
|
|
||||||
'height': 800,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'LG Optimus L70',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 384,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 1.25,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'LG Optimus L70 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 384,
|
|
||||||
'deviceScaleFactor': 1.25,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Microsoft Lumia 550',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Microsoft Lumia 950',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 4,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Microsoft Lumia 950 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 4,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 10',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 800,
|
|
||||||
'height': 1280,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 10 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1280,
|
|
||||||
'height': 800,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 4',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 384,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 4 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 384,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5X',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 412,
|
|
||||||
'height': 732,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5X landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 732,
|
|
||||||
'height': 412,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 412,
|
|
||||||
'height': 732,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 732,
|
|
||||||
'height': 412,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6P',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 412,
|
|
||||||
'height': 732,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6P landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 732,
|
|
||||||
'height': 412,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 7',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 600,
|
|
||||||
'height': 960,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 7 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 960,
|
|
||||||
'height': 600,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia Lumia 520',
|
|
||||||
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 533,
|
|
||||||
'deviceScaleFactor': 1.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia Lumia 520 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
|
||||||
'viewport': {
|
|
||||||
'width': 533,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 1.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia N9',
|
|
||||||
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
|
||||||
'viewport': {
|
|
||||||
'width': 480,
|
|
||||||
'height': 854,
|
|
||||||
'deviceScaleFactor': 1,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia N9 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
|
||||||
'viewport': {
|
|
||||||
'width': 854,
|
|
||||||
'height': 480,
|
|
||||||
'deviceScaleFactor': 1,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 411,
|
|
||||||
'height': 731,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 731,
|
|
||||||
'height': 411,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2 XL',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 411,
|
|
||||||
'height': 823,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2 XL landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 823,
|
|
||||||
'height': 411,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
];
|
|
||||||
for (const device of module.exports)
|
|
||||||
module.exports[device.name] = device;
|
|
||||||
|
83
docs/api.md
83
docs/api.md
@ -19,12 +19,13 @@
|
|||||||
- [Overview](#overview)
|
- [Overview](#overview)
|
||||||
- [puppeteer vs puppeteer-core](#puppeteer-vs-puppeteer-core)
|
- [puppeteer vs puppeteer-core](#puppeteer-vs-puppeteer-core)
|
||||||
- [Environment Variables](#environment-variables)
|
- [Environment Variables](#environment-variables)
|
||||||
- [Error handling](#error-handling)
|
|
||||||
- [Working with Chrome Extensions](#working-with-chrome-extensions)
|
- [Working with Chrome Extensions](#working-with-chrome-extensions)
|
||||||
- [class: Puppeteer](#class-puppeteer)
|
- [class: Puppeteer](#class-puppeteer)
|
||||||
* [puppeteer.connect(options)](#puppeteerconnectoptions)
|
* [puppeteer.connect(options)](#puppeteerconnectoptions)
|
||||||
* [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions)
|
* [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions)
|
||||||
* [puppeteer.defaultArgs([options])](#puppeteerdefaultargsoptions)
|
* [puppeteer.defaultArgs([options])](#puppeteerdefaultargsoptions)
|
||||||
|
* [puppeteer.devices](#puppeteerdevices)
|
||||||
|
* [puppeteer.errors](#puppeteererrors)
|
||||||
* [puppeteer.executablePath()](#puppeteerexecutablepath)
|
* [puppeteer.executablePath()](#puppeteerexecutablepath)
|
||||||
* [puppeteer.launch([options])](#puppeteerlaunchoptions)
|
* [puppeteer.launch([options])](#puppeteerlaunchoptions)
|
||||||
- [class: BrowserFetcher](#class-browserfetcher)
|
- [class: BrowserFetcher](#class-browserfetcher)
|
||||||
@ -372,32 +373,6 @@ If Puppeteer doesn't find them in the environment during the installation step,
|
|||||||
|
|
||||||
> **NOTE** PUPPETEER_* env variables are not accounted for in the [`puppeteer-core`](https://www.npmjs.com/package/puppeteer-core) package.
|
> **NOTE** PUPPETEER_* env variables are not accounted for in the [`puppeteer-core`](https://www.npmjs.com/package/puppeteer-core) package.
|
||||||
|
|
||||||
### Error handling
|
|
||||||
|
|
||||||
Puppeteer methods might throw errors if they are unable to fufill a request. For example, [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options)
|
|
||||||
might fail if the selector doesn't match any nodes during the given timeframe.
|
|
||||||
|
|
||||||
For certain types of errors Puppeteer uses specific error classes.
|
|
||||||
These classes are available via `require('puppeteer/Errors')`.
|
|
||||||
|
|
||||||
List of supported classes:
|
|
||||||
- [`TimeoutError`](#class-timeouterror)
|
|
||||||
|
|
||||||
An example of handling a timeout error:
|
|
||||||
```js
|
|
||||||
const {TimeoutError} = require('puppeteer/Errors');
|
|
||||||
|
|
||||||
// ...
|
|
||||||
|
|
||||||
try {
|
|
||||||
await page.waitForSelector('.foo');
|
|
||||||
} catch (e) {
|
|
||||||
if (e instanceof TimeoutError) {
|
|
||||||
// Do something if this is a timeout.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Working with Chrome Extensions
|
### Working with Chrome Extensions
|
||||||
|
|
||||||
@ -478,11 +453,56 @@ This methods attaches Puppeteer to an existing Chromium instance.
|
|||||||
|
|
||||||
The default flags that Chromium will be launched with.
|
The default flags that Chromium will be launched with.
|
||||||
|
|
||||||
|
#### puppeteer.devices
|
||||||
|
- returns: <[Object]>
|
||||||
|
|
||||||
|
Returns a list of devices to be used with [`page.emulate(options)`](#pageemulateoptions). Actual list of
|
||||||
|
devices can be found in [lib/DeviceDescriptors.js](https://github.com/GoogleChrome/puppeteer/blob/master/lib/DeviceDescriptors.js).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const puppeteer = require('puppeteer');
|
||||||
|
const iPhone = puppeteer.devices['iPhone 6'];
|
||||||
|
|
||||||
|
puppeteer.launch().then(async browser => {
|
||||||
|
const page = await browser.newPage();
|
||||||
|
await page.emulate(iPhone);
|
||||||
|
await page.goto('https://www.google.com');
|
||||||
|
// other actions...
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
> **NOTE** The old way (Puppeteer versions <= v1.14.0) devices can be obtained with `require('puppeteer/DeviceDescriptors')`.
|
||||||
|
|
||||||
|
#### puppeteer.errors
|
||||||
|
- returns: <[Object]>
|
||||||
|
- `TimeoutError` <[function]> A class of [TimeoutError].
|
||||||
|
|
||||||
|
Puppeteer methods might throw errors if they are unable to fufill a request. For example, [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options)
|
||||||
|
might fail if the selector doesn't match any nodes during the given timeframe.
|
||||||
|
|
||||||
|
For certain types of errors Puppeteer uses specific error classes.
|
||||||
|
These classes are available via [`puppeteer.errors`](#puppeteererrors)
|
||||||
|
|
||||||
|
An example of handling a timeout error:
|
||||||
|
```js
|
||||||
|
try {
|
||||||
|
await page.waitForSelector('.foo');
|
||||||
|
} catch (e) {
|
||||||
|
if (e instanceof puppeteer.errors.TimeoutError) {
|
||||||
|
// Do something if this is a timeout.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> **NOTE** The old way (Puppeteer versions <= v1.14.0) errors can be obtained with `require('puppeteer/Errors')`.
|
||||||
|
|
||||||
#### puppeteer.executablePath()
|
#### puppeteer.executablePath()
|
||||||
- returns: <[string]> A path where Puppeteer expects to find bundled Chromium. Chromium might not exist there if the download was skipped with [`PUPPETEER_SKIP_CHROMIUM_DOWNLOAD`](#environment-variables).
|
- returns: <[string]> A path where Puppeteer expects to find bundled Chromium. Chromium might not exist there if the download was skipped with [`PUPPETEER_SKIP_CHROMIUM_DOWNLOAD`](#environment-variables).
|
||||||
|
|
||||||
> **NOTE** `puppeteer.executablePath()` is affected by the `PUPPETEER_EXECUTABLE_PATH` and `PUPPETEER_CHROMIUM_REVISION` env variables. See [Environment Variables](#environment-variables) for details.
|
> **NOTE** `puppeteer.executablePath()` is affected by the `PUPPETEER_EXECUTABLE_PATH` and `PUPPETEER_CHROMIUM_REVISION` env variables. See [Environment Variables](#environment-variables) for details.
|
||||||
|
|
||||||
|
|
||||||
#### puppeteer.launch([options])
|
#### puppeteer.launch([options])
|
||||||
- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields:
|
- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields:
|
||||||
- `ignoreHTTPSErrors` <[boolean]> Whether to ignore HTTPS errors during navigation. Defaults to `false`.
|
- `ignoreHTTPSErrors` <[boolean]> Whether to ignore HTTPS errors during navigation. Defaults to `false`.
|
||||||
@ -1215,12 +1235,12 @@ Emulates given device metrics and user agent. This method is a shortcut for call
|
|||||||
- [page.setUserAgent(userAgent)](#pagesetuseragentuseragent)
|
- [page.setUserAgent(userAgent)](#pagesetuseragentuseragent)
|
||||||
- [page.setViewport(viewport)](#pagesetviewportviewport)
|
- [page.setViewport(viewport)](#pagesetviewportviewport)
|
||||||
|
|
||||||
To aid emulation, puppeteer provides a list of device descriptors which can be obtained via the `require('puppeteer/DeviceDescriptors')` command.
|
To aid emulation, puppeteer provides a list of device descriptors which can be obtained via the [`puppeteer.devices`](#puppeteerdevices).
|
||||||
Below is an example of emulating an iPhone 6 in puppeteer:
|
Below is an example of emulating an iPhone 6 in puppeteer:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const puppeteer = require('puppeteer');
|
const puppeteer = require('puppeteer');
|
||||||
const devices = require('puppeteer/DeviceDescriptors');
|
const iPhone = puppeteer.devices['iPhone 6'];
|
||||||
const iPhone = devices['iPhone 6'];
|
|
||||||
|
|
||||||
puppeteer.launch().then(async browser => {
|
puppeteer.launch().then(async browser => {
|
||||||
const page = await browser.newPage();
|
const page = await browser.newPage();
|
||||||
@ -1231,7 +1251,7 @@ puppeteer.launch().then(async browser => {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
List of all available devices is available in the source code: [DeviceDescriptors.js](https://github.com/GoogleChrome/puppeteer/blob/master/DeviceDescriptors.js).
|
List of all available devices is available in the source code: [DeviceDescriptors.js](https://github.com/GoogleChrome/puppeteer/blob/master/lib/DeviceDescriptors.js).
|
||||||
|
|
||||||
#### page.emulateMedia(mediaType)
|
#### page.emulateMedia(mediaType)
|
||||||
- `mediaType` <?[string]> Changes the CSS media type of the page. The only allowed values are `'screen'`, `'print'` and `null`. Passing `null` disables media emulation.
|
- `mediaType` <?[string]> Changes the CSS media type of the page. The only allowed values are `'screen'`, `'print'` and `null`. Passing `null` disables media emulation.
|
||||||
@ -3589,6 +3609,7 @@ TimeoutError is emitted whenever certain operations are terminated due to timeou
|
|||||||
[Response]: #class-response "Response"
|
[Response]: #class-response "Response"
|
||||||
[Request]: #class-request "Request"
|
[Request]: #class-request "Request"
|
||||||
[Browser]: #class-browser "Browser"
|
[Browser]: #class-browser "Browser"
|
||||||
|
[TimeoutError]: #class-timeouterror "TimeoutError"
|
||||||
[Body]: #class-body "Body"
|
[Body]: #class-body "Body"
|
||||||
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
|
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
|
||||||
[Keyboard]: #class-keyboard "Keyboard"
|
[Keyboard]: #class-keyboard "Keyboard"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2017 Google Inc. All rights reserved.
|
* Copyright 2019 Google Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -14,811 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports = [
|
let asyncawait = true;
|
||||||
{
|
try {
|
||||||
'name': 'Blackberry PlayBook',
|
new Function('async function test(){await 1}');
|
||||||
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
} catch (error) {
|
||||||
'viewport': {
|
asyncawait = false;
|
||||||
'width': 600,
|
}
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 1,
|
// If node does not support async await, use the compiled version.
|
||||||
'isMobile': true,
|
if (asyncawait)
|
||||||
'hasTouch': true,
|
module.exports = require('./lib/DeviceDescriptors');
|
||||||
'isLandscape': false
|
else
|
||||||
}
|
module.exports = require('./node6/lib/DeviceDescriptors');
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Blackberry PlayBook landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 600,
|
|
||||||
'deviceScaleFactor': 1,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'BlackBerry Z30',
|
|
||||||
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'BlackBerry Z30 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note 3',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note 3 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note II',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy Note II landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S III',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S III landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S5',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Galaxy S5 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 768,
|
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 768,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Mini',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 768,
|
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Mini landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 768,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Pro',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1024,
|
|
||||||
'height': 1366,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPad Pro landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1366,
|
|
||||||
'height': 1024,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 4',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 480,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 4 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
|
||||||
'viewport': {
|
|
||||||
'width': 480,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 5',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 568,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 5 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 568,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 667,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 667,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6 Plus',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 414,
|
|
||||||
'height': 736,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 6 Plus landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 736,
|
|
||||||
'height': 414,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 667,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 667,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7 Plus',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 414,
|
|
||||||
'height': 736,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 7 Plus landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 736,
|
|
||||||
'height': 414,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 667,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 667,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8 Plus',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 414,
|
|
||||||
'height': 736,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone 8 Plus landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 736,
|
|
||||||
'height': 414,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone SE',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 568,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone SE landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 568,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone X',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 375,
|
|
||||||
'height': 812,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'iPhone X landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
|
||||||
'viewport': {
|
|
||||||
'width': 812,
|
|
||||||
'height': 375,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Kindle Fire HDX',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
|
||||||
'viewport': {
|
|
||||||
'width': 800,
|
|
||||||
'height': 1280,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Kindle Fire HDX landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1280,
|
|
||||||
'height': 800,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'LG Optimus L70',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 384,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 1.25,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'LG Optimus L70 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 384,
|
|
||||||
'deviceScaleFactor': 1.25,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Microsoft Lumia 550',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Microsoft Lumia 950',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 4,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Microsoft Lumia 950 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 4,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 10',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 800,
|
|
||||||
'height': 1280,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 10 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 1280,
|
|
||||||
'height': 800,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 4',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 384,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 4 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 384,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 360,
|
|
||||||
'height': 640,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 640,
|
|
||||||
'height': 360,
|
|
||||||
'deviceScaleFactor': 3,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5X',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 412,
|
|
||||||
'height': 732,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 5X landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 732,
|
|
||||||
'height': 412,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 412,
|
|
||||||
'height': 732,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 732,
|
|
||||||
'height': 412,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6P',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 412,
|
|
||||||
'height': 732,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 6P landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 732,
|
|
||||||
'height': 412,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 7',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 600,
|
|
||||||
'height': 960,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nexus 7 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 960,
|
|
||||||
'height': 600,
|
|
||||||
'deviceScaleFactor': 2,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia Lumia 520',
|
|
||||||
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
|
||||||
'viewport': {
|
|
||||||
'width': 320,
|
|
||||||
'height': 533,
|
|
||||||
'deviceScaleFactor': 1.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia Lumia 520 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
|
||||||
'viewport': {
|
|
||||||
'width': 533,
|
|
||||||
'height': 320,
|
|
||||||
'deviceScaleFactor': 1.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia N9',
|
|
||||||
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
|
||||||
'viewport': {
|
|
||||||
'width': 480,
|
|
||||||
'height': 854,
|
|
||||||
'deviceScaleFactor': 1,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Nokia N9 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
|
||||||
'viewport': {
|
|
||||||
'width': 854,
|
|
||||||
'height': 480,
|
|
||||||
'deviceScaleFactor': 1,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 411,
|
|
||||||
'height': 731,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2 landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 731,
|
|
||||||
'height': 411,
|
|
||||||
'deviceScaleFactor': 2.625,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2 XL',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 411,
|
|
||||||
'height': 823,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'Pixel 2 XL landscape',
|
|
||||||
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
|
||||||
'viewport': {
|
|
||||||
'width': 823,
|
|
||||||
'height': 411,
|
|
||||||
'deviceScaleFactor': 3.5,
|
|
||||||
'isMobile': true,
|
|
||||||
'hasTouch': true,
|
|
||||||
'isLandscape': true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
];
|
|
||||||
for (const device of module.exports)
|
|
||||||
module.exports[device.name] = device;
|
|
||||||
|
824
experimental/puppeteer-firefox/lib/DeviceDescriptors.js
Normal file
824
experimental/puppeteer-firefox/lib/DeviceDescriptors.js
Normal file
@ -0,0 +1,824 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = [
|
||||||
|
{
|
||||||
|
'name': 'Blackberry PlayBook',
|
||||||
|
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 600,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Blackberry PlayBook landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 600,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'BlackBerry Z30',
|
||||||
|
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'BlackBerry Z30 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note 3',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note 3 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note II',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note II landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S III',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S III landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S5',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S5 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 768,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 768,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Mini',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 768,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Mini landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 768,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Pro',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 1366,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Pro landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1366,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 4',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 480,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 4 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
||||||
|
'viewport': {
|
||||||
|
'width': 480,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 5',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 568,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 5 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 568,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 667,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 667,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6 Plus',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 414,
|
||||||
|
'height': 736,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6 Plus landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 736,
|
||||||
|
'height': 414,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 667,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 667,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7 Plus',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 414,
|
||||||
|
'height': 736,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7 Plus landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 736,
|
||||||
|
'height': 414,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 667,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 667,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8 Plus',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 414,
|
||||||
|
'height': 736,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8 Plus landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 736,
|
||||||
|
'height': 414,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone SE',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 568,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone SE landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 568,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone X',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 812,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone X landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 812,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Kindle Fire HDX',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
||||||
|
'viewport': {
|
||||||
|
'width': 800,
|
||||||
|
'height': 1280,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Kindle Fire HDX landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1280,
|
||||||
|
'height': 800,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'LG Optimus L70',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 384,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 1.25,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'LG Optimus L70 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 384,
|
||||||
|
'deviceScaleFactor': 1.25,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Microsoft Lumia 550',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Microsoft Lumia 950',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 4,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Microsoft Lumia 950 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 4,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 10',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 800,
|
||||||
|
'height': 1280,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 10 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1280,
|
||||||
|
'height': 800,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 4',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 384,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 4 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 384,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5X',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 412,
|
||||||
|
'height': 732,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5X landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 732,
|
||||||
|
'height': 412,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 412,
|
||||||
|
'height': 732,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 732,
|
||||||
|
'height': 412,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6P',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 412,
|
||||||
|
'height': 732,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6P landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 732,
|
||||||
|
'height': 412,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 7',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 600,
|
||||||
|
'height': 960,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 7 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 960,
|
||||||
|
'height': 600,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia Lumia 520',
|
||||||
|
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 533,
|
||||||
|
'deviceScaleFactor': 1.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia Lumia 520 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
||||||
|
'viewport': {
|
||||||
|
'width': 533,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 1.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia N9',
|
||||||
|
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
||||||
|
'viewport': {
|
||||||
|
'width': 480,
|
||||||
|
'height': 854,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia N9 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
||||||
|
'viewport': {
|
||||||
|
'width': 854,
|
||||||
|
'height': 480,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 411,
|
||||||
|
'height': 731,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 731,
|
||||||
|
'height': 411,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2 XL',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 411,
|
||||||
|
'height': 823,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2 XL landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 823,
|
||||||
|
'height': 411,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
for (const device of module.exports)
|
||||||
|
module.exports[device.name] = device;
|
@ -1,5 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2019 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
const {Launcher} = require('./Launcher.js');
|
const {Launcher} = require('./Launcher.js');
|
||||||
const {BrowserFetcher} = require('./BrowserFetcher.js');
|
const {BrowserFetcher} = require('./BrowserFetcher.js');
|
||||||
|
const Errors = require('./Errors');
|
||||||
|
const DeviceDescriptors = require('./DeviceDescriptors');
|
||||||
|
|
||||||
class Puppeteer {
|
class Puppeteer {
|
||||||
/**
|
/**
|
||||||
@ -30,6 +48,20 @@ class Puppeteer {
|
|||||||
defaultArgs(options) {
|
defaultArgs(options) {
|
||||||
return this._launcher.defaultArgs(options);
|
return this._launcher.defaultArgs(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
get devices() {
|
||||||
|
return DeviceDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
get errors() {
|
||||||
|
return Errors;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {Puppeteer};
|
module.exports = {Puppeteer};
|
||||||
|
824
lib/DeviceDescriptors.js
Normal file
824
lib/DeviceDescriptors.js
Normal file
@ -0,0 +1,824 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = [
|
||||||
|
{
|
||||||
|
'name': 'Blackberry PlayBook',
|
||||||
|
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 600,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Blackberry PlayBook landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 600,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'BlackBerry Z30',
|
||||||
|
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'BlackBerry Z30 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note 3',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note 3 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note II',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy Note II landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S III',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S III landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S5',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Galaxy S5 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 768,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 768,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Mini',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 768,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Mini landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 768,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Pro',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1024,
|
||||||
|
'height': 1366,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPad Pro landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1366,
|
||||||
|
'height': 1024,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 4',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 480,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 4 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
||||||
|
'viewport': {
|
||||||
|
'width': 480,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 5',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 568,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 5 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 568,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 667,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 667,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6 Plus',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 414,
|
||||||
|
'height': 736,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 6 Plus landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 736,
|
||||||
|
'height': 414,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 667,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 667,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7 Plus',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 414,
|
||||||
|
'height': 736,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 7 Plus landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 736,
|
||||||
|
'height': 414,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 667,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 667,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8 Plus',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 414,
|
||||||
|
'height': 736,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone 8 Plus landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 736,
|
||||||
|
'height': 414,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone SE',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 568,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone SE landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 568,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone X',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 375,
|
||||||
|
'height': 812,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'iPhone X landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
|
||||||
|
'viewport': {
|
||||||
|
'width': 812,
|
||||||
|
'height': 375,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Kindle Fire HDX',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
||||||
|
'viewport': {
|
||||||
|
'width': 800,
|
||||||
|
'height': 1280,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Kindle Fire HDX landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1280,
|
||||||
|
'height': 800,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'LG Optimus L70',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 384,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 1.25,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'LG Optimus L70 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 384,
|
||||||
|
'deviceScaleFactor': 1.25,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Microsoft Lumia 550',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Microsoft Lumia 950',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 4,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Microsoft Lumia 950 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 4,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 10',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 800,
|
||||||
|
'height': 1280,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 10 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 1280,
|
||||||
|
'height': 800,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 4',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 384,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 4 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 384,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 360,
|
||||||
|
'height': 640,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 640,
|
||||||
|
'height': 360,
|
||||||
|
'deviceScaleFactor': 3,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5X',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 412,
|
||||||
|
'height': 732,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 5X landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 732,
|
||||||
|
'height': 412,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 412,
|
||||||
|
'height': 732,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 732,
|
||||||
|
'height': 412,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6P',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 412,
|
||||||
|
'height': 732,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 6P landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 732,
|
||||||
|
'height': 412,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 7',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 600,
|
||||||
|
'height': 960,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nexus 7 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 960,
|
||||||
|
'height': 600,
|
||||||
|
'deviceScaleFactor': 2,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia Lumia 520',
|
||||||
|
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
||||||
|
'viewport': {
|
||||||
|
'width': 320,
|
||||||
|
'height': 533,
|
||||||
|
'deviceScaleFactor': 1.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia Lumia 520 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
|
||||||
|
'viewport': {
|
||||||
|
'width': 533,
|
||||||
|
'height': 320,
|
||||||
|
'deviceScaleFactor': 1.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia N9',
|
||||||
|
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
||||||
|
'viewport': {
|
||||||
|
'width': 480,
|
||||||
|
'height': 854,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Nokia N9 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
|
||||||
|
'viewport': {
|
||||||
|
'width': 854,
|
||||||
|
'height': 480,
|
||||||
|
'deviceScaleFactor': 1,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 411,
|
||||||
|
'height': 731,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2 landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 731,
|
||||||
|
'height': 411,
|
||||||
|
'deviceScaleFactor': 2.625,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2 XL',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 411,
|
||||||
|
'height': 823,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pixel 2 XL landscape',
|
||||||
|
'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Mobile Safari/537.36',
|
||||||
|
'viewport': {
|
||||||
|
'width': 823,
|
||||||
|
'height': 411,
|
||||||
|
'deviceScaleFactor': 3.5,
|
||||||
|
'isMobile': true,
|
||||||
|
'hasTouch': true,
|
||||||
|
'isLandscape': true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
for (const device of module.exports)
|
||||||
|
module.exports[device.name] = device;
|
@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
const Launcher = require('./Launcher');
|
const Launcher = require('./Launcher');
|
||||||
const BrowserFetcher = require('./BrowserFetcher');
|
const BrowserFetcher = require('./BrowserFetcher');
|
||||||
|
const Errors = require('./Errors');
|
||||||
|
const DeviceDescriptors = require('./DeviceDescriptors');
|
||||||
|
|
||||||
module.exports = class {
|
module.exports = class {
|
||||||
/**
|
/**
|
||||||
@ -50,6 +52,20 @@ module.exports = class {
|
|||||||
return this._launcher.executablePath();
|
return this._launcher.executablePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
get devices() {
|
||||||
|
return DeviceDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
get errors() {
|
||||||
|
return Errors;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {!Launcher.ChromeArgOptions=} options
|
* @param {!Launcher.ChromeArgOptions=} options
|
||||||
* @return {!Array<string>}
|
* @return {!Array<string>}
|
||||||
|
@ -16,11 +16,10 @@
|
|||||||
|
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, puppeteer, Errors}) {
|
module.exports.addTests = function({testRunner, expect, puppeteer}) {
|
||||||
const {describe, xdescribe, fdescribe} = testRunner;
|
const {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit} = testRunner;
|
const {it, fit, xit} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
const {TimeoutError} = Errors;
|
|
||||||
|
|
||||||
describe('BrowserContext', function() {
|
describe('BrowserContext', function() {
|
||||||
it('should have default context', async function({browser, server}) {
|
it('should have default context', async function({browser, server}) {
|
||||||
@ -94,7 +93,7 @@ module.exports.addTests = function({testRunner, expect, puppeteer, Errors}) {
|
|||||||
it('should timeout waiting for a non-existent target', async function({browser, server}) {
|
it('should timeout waiting for a non-existent target', async function({browser, server}) {
|
||||||
const context = await browser.createIncognitoBrowserContext();
|
const context = await browser.createIncognitoBrowserContext();
|
||||||
const error = await context.waitForTarget(target => target.url() === server.EMPTY_PAGE, {timeout: 1}).catch(e => e);
|
const error = await context.waitForTarget(target => target.url() === server.EMPTY_PAGE, {timeout: 1}).catch(e => e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
await context.close();
|
await context.close();
|
||||||
});
|
});
|
||||||
it('should isolate localStorage and cookies', async function({browser, server}) {
|
it('should isolate localStorage and cookies', async function({browser, server}) {
|
||||||
|
@ -15,13 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
const DeviceDescriptors = utils.requireRoot('DeviceDescriptors');
|
|
||||||
const iPhone = DeviceDescriptors['iPhone 6'];
|
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect}) {
|
module.exports.addTests = function({testRunner, expect, puppeteer}) {
|
||||||
const {describe, xdescribe, fdescribe} = testRunner;
|
const {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
|
|
||||||
describe('Page.click', function() {
|
describe('Page.click', function() {
|
||||||
it('should click the button', async({page, server}) => {
|
it('should click the button', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/input/button.html');
|
await page.goto(server.PREFIX + '/input/button.html');
|
||||||
@ -160,7 +159,7 @@ module.exports.addTests = function({testRunner, expect}) {
|
|||||||
});
|
});
|
||||||
// @see https://github.com/GoogleChrome/puppeteer/issues/161
|
// @see https://github.com/GoogleChrome/puppeteer/issues/161
|
||||||
it('should not hang with touch-enabled viewports', async({page, server}) => {
|
it('should not hang with touch-enabled viewports', async({page, server}) => {
|
||||||
await page.setViewport(iPhone.viewport);
|
await page.setViewport(puppeteer.devices['iPhone 6'].viewport);
|
||||||
await page.mouse.down();
|
await page.mouse.down();
|
||||||
await page.mouse.move(100, 10);
|
await page.mouse.move(100, 10);
|
||||||
await page.mouse.up();
|
await page.mouse.up();
|
||||||
|
@ -14,16 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const utils = require('./utils');
|
module.exports.addTests = function({testRunner, expect, puppeteer}) {
|
||||||
const DeviceDescriptors = utils.requireRoot('DeviceDescriptors');
|
|
||||||
const iPhone = DeviceDescriptors['iPhone 6'];
|
|
||||||
const iPhoneLandscape = DeviceDescriptors['iPhone 6 landscape'];
|
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, product}) {
|
|
||||||
const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner;
|
const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
|
|
||||||
|
const iPhone = puppeteer.devices['iPhone 6'];
|
||||||
|
const iPhoneLandscape = puppeteer.devices['iPhone 6 landscape'];
|
||||||
|
|
||||||
describe('Page.viewport', function() {
|
describe('Page.viewport', function() {
|
||||||
it('should get the proper viewport size', async({page, server}) => {
|
it('should get the proper viewport size', async({page, server}) => {
|
||||||
expect(page.viewport()).toEqual({width: 800, height: 600});
|
expect(page.viewport()).toEqual({width: 800, height: 600});
|
||||||
|
@ -24,7 +24,7 @@ const statAsync = helper.promisify(fs.stat);
|
|||||||
const TMP_FOLDER = path.join(os.tmpdir(), 'pptr_tmp_folder-');
|
const TMP_FOLDER = path.join(os.tmpdir(), 'pptr_tmp_folder-');
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, defaultBrowserOptions, puppeteer, CHROME}) {
|
module.exports.addTests = function({testRunner, expect, defaultBrowserOptions, puppeteer, CHROME, puppeteerPath}) {
|
||||||
const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner;
|
const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
@ -339,6 +339,17 @@ module.exports.addTests = function({testRunner, expect, defaultBrowserOptions, p
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Top-level requires', function() {
|
||||||
|
it('should require top-level Errors', async() => {
|
||||||
|
const Errors = require(path.join(puppeteerPath, '/Errors'));
|
||||||
|
expect(Errors.TimeoutError).toBe(puppeteer.errors.TimeoutError);
|
||||||
|
});
|
||||||
|
it('should require top-level DeviceDescriptors', async() => {
|
||||||
|
const Devices = require(path.join(puppeteerPath, '/DeviceDescriptors'));
|
||||||
|
expect(Devices['iPhone 6']).toBe(puppeteer.devices['iPhone 6']);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('Browser target events', function() {
|
describe('Browser target events', function() {
|
||||||
it('should work', async({server}) => {
|
it('should work', async({server}) => {
|
||||||
const browser = await puppeteer.launch(defaultBrowserOptions);
|
const browser = await puppeteer.launch(defaultBrowserOptions);
|
||||||
|
@ -16,11 +16,10 @@
|
|||||||
|
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, Errors, CHROME}) {
|
module.exports.addTests = function({testRunner, expect, puppeteer, CHROME}) {
|
||||||
const {describe, xdescribe, fdescribe} = testRunner;
|
const {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
const {TimeoutError} = Errors;
|
|
||||||
|
|
||||||
describe('Page.goto', function() {
|
describe('Page.goto', function() {
|
||||||
it('should work', async({page, server}) => {
|
it('should work', async({page, server}) => {
|
||||||
@ -139,7 +138,7 @@ module.exports.addTests = function({testRunner, expect, Errors, CHROME}) {
|
|||||||
let error = null;
|
let error = null;
|
||||||
await page.goto(server.PREFIX + '/empty.html', {timeout: 1}).catch(e => error = e);
|
await page.goto(server.PREFIX + '/empty.html', {timeout: 1}).catch(e => error = e);
|
||||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should fail when exceeding default maximum navigation timeout', async({page, server}) => {
|
it('should fail when exceeding default maximum navigation timeout', async({page, server}) => {
|
||||||
// Hang for request to the empty.html
|
// Hang for request to the empty.html
|
||||||
@ -148,7 +147,7 @@ module.exports.addTests = function({testRunner, expect, Errors, CHROME}) {
|
|||||||
page.setDefaultNavigationTimeout(1);
|
page.setDefaultNavigationTimeout(1);
|
||||||
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
||||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should fail when exceeding default maximum timeout', async({page, server}) => {
|
it('should fail when exceeding default maximum timeout', async({page, server}) => {
|
||||||
// Hang for request to the empty.html
|
// Hang for request to the empty.html
|
||||||
@ -157,7 +156,7 @@ module.exports.addTests = function({testRunner, expect, Errors, CHROME}) {
|
|||||||
page.setDefaultTimeout(1);
|
page.setDefaultTimeout(1);
|
||||||
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
||||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should prioritize default navigation timeout over default timeout', async({page, server}) => {
|
it('should prioritize default navigation timeout over default timeout', async({page, server}) => {
|
||||||
// Hang for request to the empty.html
|
// Hang for request to the empty.html
|
||||||
@ -167,7 +166,7 @@ module.exports.addTests = function({testRunner, expect, Errors, CHROME}) {
|
|||||||
page.setDefaultNavigationTimeout(1);
|
page.setDefaultNavigationTimeout(1);
|
||||||
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
||||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should disable timeout when its set to 0', async({page, server}) => {
|
it('should disable timeout when its set to 0', async({page, server}) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
|
@ -25,14 +25,11 @@ try {
|
|||||||
asyncawait = false;
|
asyncawait = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, headless, Errors, DeviceDescriptors, CHROME}) {
|
module.exports.addTests = function({testRunner, expect, headless, puppeteer, CHROME}) {
|
||||||
const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner;
|
const {describe, xdescribe, fdescribe, describe_fails_ffox} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
|
|
||||||
const {TimeoutError} = Errors;
|
|
||||||
const iPhone = DeviceDescriptors['iPhone 6'];
|
|
||||||
|
|
||||||
describe('Page.close', function() {
|
describe('Page.close', function() {
|
||||||
it('should reject all promises when page is closed', async({context}) => {
|
it('should reject all promises when page is closed', async({context}) => {
|
||||||
const newPage = await context.newPage();
|
const newPage = await context.newPage();
|
||||||
@ -496,13 +493,13 @@ module.exports.addTests = function({testRunner, expect, headless, Errors, Device
|
|||||||
it('should respect timeout', async({page, server}) => {
|
it('should respect timeout', async({page, server}) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
await page.waitForRequest(() => false, {timeout: 1}).catch(e => error = e);
|
await page.waitForRequest(() => false, {timeout: 1}).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should respect default timeout', async({page, server}) => {
|
it('should respect default timeout', async({page, server}) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
page.setDefaultTimeout(1);
|
page.setDefaultTimeout(1);
|
||||||
await page.waitForRequest(() => false).catch(e => error = e);
|
await page.waitForRequest(() => false).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should work with no timeout', async({page, server}) => {
|
it('should work with no timeout', async({page, server}) => {
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
@ -534,13 +531,13 @@ module.exports.addTests = function({testRunner, expect, headless, Errors, Device
|
|||||||
it('should respect timeout', async({page, server}) => {
|
it('should respect timeout', async({page, server}) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
await page.waitForResponse(() => false, {timeout: 1}).catch(e => error = e);
|
await page.waitForResponse(() => false, {timeout: 1}).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should respect default timeout', async({page, server}) => {
|
it('should respect default timeout', async({page, server}) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
page.setDefaultTimeout(1);
|
page.setDefaultTimeout(1);
|
||||||
await page.waitForResponse(() => false).catch(e => error = e);
|
await page.waitForResponse(() => false).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should work with predicate', async({page, server}) => {
|
it('should work with predicate', async({page, server}) => {
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
@ -695,7 +692,7 @@ module.exports.addTests = function({testRunner, expect, headless, Errors, Device
|
|||||||
it('should emulate device user-agent', async({page, server}) => {
|
it('should emulate device user-agent', async({page, server}) => {
|
||||||
await page.goto(server.PREFIX + '/mobile.html');
|
await page.goto(server.PREFIX + '/mobile.html');
|
||||||
expect(await page.evaluate(() => navigator.userAgent)).not.toContain('iPhone');
|
expect(await page.evaluate(() => navigator.userAgent)).not.toContain('iPhone');
|
||||||
await page.setUserAgent(iPhone.userAgent);
|
await page.setUserAgent(puppeteer.devices['iPhone 6'].userAgent);
|
||||||
expect(await page.evaluate(() => navigator.userAgent)).toContain('iPhone');
|
expect(await page.evaluate(() => navigator.userAgent)).toContain('iPhone');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -726,7 +723,7 @@ module.exports.addTests = function({testRunner, expect, headless, Errors, Device
|
|||||||
server.setRoute(imgPath, (req, res) => {});
|
server.setRoute(imgPath, (req, res) => {});
|
||||||
let error = null;
|
let error = null;
|
||||||
await page.setContent(`<img src="${server.PREFIX + imgPath}"></img>`, {timeout: 1}).catch(e => error = e);
|
await page.setContent(`<img src="${server.PREFIX + imgPath}"></img>`, {timeout: 1}).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it_fails_ffox('should respect default navigation timeout', async({page, server}) => {
|
it_fails_ffox('should respect default navigation timeout', async({page, server}) => {
|
||||||
page.setDefaultNavigationTimeout(1);
|
page.setDefaultNavigationTimeout(1);
|
||||||
@ -735,7 +732,7 @@ module.exports.addTests = function({testRunner, expect, headless, Errors, Device
|
|||||||
server.setRoute(imgPath, (req, res) => {});
|
server.setRoute(imgPath, (req, res) => {});
|
||||||
let error = null;
|
let error = null;
|
||||||
await page.setContent(`<img src="${server.PREFIX + imgPath}"></img>`).catch(e => error = e);
|
await page.setContent(`<img src="${server.PREFIX + imgPath}"></img>`).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it_fails_ffox('should await resources to load', async({page, server}) => {
|
it_fails_ffox('should await resources to load', async({page, server}) => {
|
||||||
const imgPath = '/img.png';
|
const imgPath = '/img.png';
|
||||||
|
@ -31,8 +31,6 @@ module.exports.addTests = ({testRunner, product, puppeteerPath}) => {
|
|||||||
const FFOX = product === 'Firefox';
|
const FFOX = product === 'Firefox';
|
||||||
|
|
||||||
const puppeteer = require(puppeteerPath);
|
const puppeteer = require(puppeteerPath);
|
||||||
const Errors = require(path.join(puppeteerPath, 'Errors'));
|
|
||||||
const DeviceDescriptors = require(path.join(puppeteerPath, 'DeviceDescriptors'));
|
|
||||||
|
|
||||||
const headless = (process.env.HEADLESS || 'true').trim().toLowerCase() === 'true';
|
const headless = (process.env.HEADLESS || 'true').trim().toLowerCase() === 'true';
|
||||||
const slowMo = parseInt((process.env.SLOW_MO || '0').trim(), 10);
|
const slowMo = parseInt((process.env.SLOW_MO || '0').trim(), 10);
|
||||||
@ -67,8 +65,6 @@ module.exports.addTests = ({testRunner, product, puppeteerPath}) => {
|
|||||||
FFOX,
|
FFOX,
|
||||||
CHROME,
|
CHROME,
|
||||||
puppeteer,
|
puppeteer,
|
||||||
Errors,
|
|
||||||
DeviceDescriptors,
|
|
||||||
expect,
|
expect,
|
||||||
defaultBrowserOptions,
|
defaultBrowserOptions,
|
||||||
puppeteerPath,
|
puppeteerPath,
|
||||||
|
@ -17,11 +17,10 @@
|
|||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
const {waitEvent} = utils;
|
const {waitEvent} = utils;
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, puppeteer, Errors}) {
|
module.exports.addTests = function({testRunner, expect, puppeteer}) {
|
||||||
const {describe, xdescribe, fdescribe} = testRunner;
|
const {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
const {TimeoutError} = Errors;
|
|
||||||
|
|
||||||
describe('Target', function() {
|
describe('Target', function() {
|
||||||
it('Browser.targets should return all of the targets', async({page, server, browser}) => {
|
it('Browser.targets should return all of the targets', async({page, server, browser}) => {
|
||||||
@ -161,7 +160,7 @@ module.exports.addTests = function({testRunner, expect, puppeteer, Errors}) {
|
|||||||
await browser.waitForTarget(target => target.url() === server.EMPTY_PAGE, {
|
await browser.waitForTarget(target => target.url() === server.EMPTY_PAGE, {
|
||||||
timeout: 1
|
timeout: 1
|
||||||
}).catch(e => error = e);
|
}).catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, DeviceDescriptors}) {
|
module.exports.addTests = function({testRunner, expect, puppeteer}) {
|
||||||
const {describe, xdescribe, fdescribe} = testRunner;
|
const {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const iPhone = DeviceDescriptors['iPhone 6'];
|
const iPhone = puppeteer.devices['iPhone 6'];
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
describe('Touchscreen', function() {
|
describe('Touchscreen', function() {
|
||||||
it('should tap the button', async({page, server}) => {
|
it('should tap the button', async({page, server}) => {
|
||||||
|
@ -70,13 +70,6 @@ const utils = module.exports = {
|
|||||||
return PROJECT_ROOT;
|
return PROJECT_ROOT;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {*}
|
|
||||||
*/
|
|
||||||
requireRoot: function(name) {
|
|
||||||
return require(path.join(PROJECT_ROOT, name));
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {!Page} page
|
* @param {!Page} page
|
||||||
* @param {string} frameId
|
* @param {string} frameId
|
||||||
|
@ -23,11 +23,10 @@ try {
|
|||||||
asyncawait = false;
|
asyncawait = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.addTests = function({testRunner, expect, product, Errors}) {
|
module.exports.addTests = function({testRunner, expect, product, puppeteer}) {
|
||||||
const {describe, xdescribe, fdescribe} = testRunner;
|
const {describe, xdescribe, fdescribe} = testRunner;
|
||||||
const {it, fit, xit, it_fails_ffox} = testRunner;
|
const {it, fit, xit, it_fails_ffox} = testRunner;
|
||||||
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
const {beforeAll, beforeEach, afterAll, afterEach} = testRunner;
|
||||||
const {TimeoutError} = Errors;
|
|
||||||
|
|
||||||
describe('Page.waitFor', function() {
|
describe('Page.waitFor', function() {
|
||||||
it('should wait for selector', async({page, server}) => {
|
it('should wait for selector', async({page, server}) => {
|
||||||
@ -172,13 +171,13 @@ module.exports.addTests = function({testRunner, expect, product, Errors}) {
|
|||||||
await page.waitForFunction('false', {timeout: 10}).catch(e => error = e);
|
await page.waitForFunction('false', {timeout: 10}).catch(e => error = e);
|
||||||
expect(error).toBeTruthy();
|
expect(error).toBeTruthy();
|
||||||
expect(error.message).toContain('waiting for function failed: timeout');
|
expect(error.message).toContain('waiting for function failed: timeout');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should respect default timeout', async({page}) => {
|
it('should respect default timeout', async({page}) => {
|
||||||
page.setDefaultTimeout(1);
|
page.setDefaultTimeout(1);
|
||||||
let error = null;
|
let error = null;
|
||||||
await page.waitForFunction('false').catch(e => error = e);
|
await page.waitForFunction('false').catch(e => error = e);
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
expect(error.message).toContain('waiting for function failed: timeout');
|
expect(error.message).toContain('waiting for function failed: timeout');
|
||||||
});
|
});
|
||||||
it('should disable timeout when its set to 0', async({page}) => {
|
it('should disable timeout when its set to 0', async({page}) => {
|
||||||
@ -356,7 +355,7 @@ module.exports.addTests = function({testRunner, expect, product, Errors}) {
|
|||||||
await page.waitForSelector('div', {timeout: 10}).catch(e => error = e);
|
await page.waitForSelector('div', {timeout: 10}).catch(e => error = e);
|
||||||
expect(error).toBeTruthy();
|
expect(error).toBeTruthy();
|
||||||
expect(error.message).toContain('waiting for selector "div" failed: timeout');
|
expect(error.message).toContain('waiting for selector "div" failed: timeout');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should have an error message specifically for awaiting an element to be hidden', async({page, server}) => {
|
it('should have an error message specifically for awaiting an element to be hidden', async({page, server}) => {
|
||||||
await page.setContent(`<div></div>`);
|
await page.setContent(`<div></div>`);
|
||||||
@ -399,7 +398,7 @@ module.exports.addTests = function({testRunner, expect, product, Errors}) {
|
|||||||
await page.waitForXPath('//div', {timeout: 10}).catch(e => error = e);
|
await page.waitForXPath('//div', {timeout: 10}).catch(e => error = e);
|
||||||
expect(error).toBeTruthy();
|
expect(error).toBeTruthy();
|
||||||
expect(error.message).toContain('waiting for XPath "//div" failed: timeout');
|
expect(error.message).toContain('waiting for XPath "//div" failed: timeout');
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(puppeteer.errors.TimeoutError);
|
||||||
});
|
});
|
||||||
it('should run in specified frame', async({page, server}) => {
|
it('should run in specified frame', async({page, server}) => {
|
||||||
await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);
|
await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE);
|
||||||
|
@ -41,20 +41,30 @@ Documentation.Class = class {
|
|||||||
this.members = new Map();
|
this.members = new Map();
|
||||||
/** @type {!Map<string, !Documentation.Member>} */
|
/** @type {!Map<string, !Documentation.Member>} */
|
||||||
this.properties = new Map();
|
this.properties = new Map();
|
||||||
|
/** @type {!Array<!Documentation.Member>} */
|
||||||
|
this.propertiesArray = [];
|
||||||
/** @type {!Map<string, !Documentation.Member>} */
|
/** @type {!Map<string, !Documentation.Member>} */
|
||||||
this.methods = new Map();
|
this.methods = new Map();
|
||||||
|
/** @type {!Array<!Documentation.Member>} */
|
||||||
|
this.methodsArray = [];
|
||||||
/** @type {!Map<string, !Documentation.Member>} */
|
/** @type {!Map<string, !Documentation.Member>} */
|
||||||
this.events = new Map();
|
this.events = new Map();
|
||||||
|
/** @type {!Array<!Documentation.Member>} */
|
||||||
|
this.eventsArray = [];
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
this.extends = extendsName;
|
this.extends = extendsName;
|
||||||
for (const member of membersArray) {
|
for (const member of membersArray) {
|
||||||
this.members.set(member.name, member);
|
this.members.set(member.name, member);
|
||||||
if (member.kind === 'method')
|
if (member.kind === 'method') {
|
||||||
this.methods.set(member.name, member);
|
this.methods.set(member.name, member);
|
||||||
else if (member.kind === 'property')
|
this.methodsArray.push(member);
|
||||||
|
} else if (member.kind === 'property') {
|
||||||
this.properties.set(member.name, member);
|
this.properties.set(member.name, member);
|
||||||
else if (member.kind === 'event')
|
this.propertiesArray.push(member);
|
||||||
|
} else if (member.kind === 'event') {
|
||||||
this.events.set(member.name, member);
|
this.events.set(member.name, member);
|
||||||
|
this.eventsArray.push(member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -21,8 +21,11 @@ import { EventEmitter } from 'events';
|
|||||||
interface Serializable {}
|
interface Serializable {}
|
||||||
interface ConnectionTransport {}
|
interface ConnectionTransport {}
|
||||||
|
|
||||||
${root.membersArray.map(member => `
|
${root.methodsArray.map(method => `
|
||||||
${memberJSDOC(member, '')}export function ${member.name}${argsFromMember(member)} : ${typeToString(member.type, member.name)};
|
${memberJSDOC(method, '')}export function ${method.name}${argsFromMember(method)} : ${typeToString(method.type, method.name)};
|
||||||
|
`).join('')}
|
||||||
|
${root.propertiesArray.map(property => `
|
||||||
|
${memberJSDOC(property, '')}export const ${property.name}${argsFromMember(property)} : ${typeToString(property.type, property.name)};
|
||||||
`).join('')}
|
`).join('')}
|
||||||
${classes.map(classDesc => classToString(classDesc)).join('\n')}
|
${classes.map(classDesc => classToString(classDesc)).join('\n')}
|
||||||
${objectDefinitionsToString()}
|
${objectDefinitionsToString()}
|
||||||
@ -215,4 +218,4 @@ function memberJSDOC(member, indent) {
|
|||||||
${indent} * ${lines.join('\n' + indent + ' * ')}
|
${indent} * ${lines.join('\n' + indent + ' * ')}
|
||||||
${indent} */
|
${indent} */
|
||||||
${indent}`;
|
${indent}`;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user