[{"data":1,"prerenderedAt":260},["ShallowReactive",2],{"SiteFooter_cLEacilcm59lTjFJjLY6mXNWLL0ETtzOIiZwIHgDpy0":3,"doc-\u002Fdocs\u002Fmobile\u002Fdevice-list":17,"docs-nav":164,"nav-compare":243,"editor-1uiopbk":253,"DeviceRows_Pktgj8d0UDqKBYkjdiXK8vvg83kSReqicyrABNQ4pk":255},["Island",4],{"key":5,"result":6},"SiteFooter_cLEacilcm59lTjFJjLY6mXNWLL0ETtzOIiZwIHgDpy0",{"head":7},{"style":8},[9,11,13,15],{"innerHTML":10},".site-footer[data-v-8bb1d4ae]{border-top:1px solid var(--line);background:var(--chrome);padding:var(--sp-8) var(--gutter) var(--sp-10);gap:var(--sp-6);flex-direction:column;display:flex}.links[data-v-8bb1d4ae]{gap:var(--sp-4);grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));max-width:62rem;display:grid}.links a[data-v-8bb1d4ae]{align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3);border-bottom:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--ink);border:1px solid var(--line);display:flex}.links a[data-v-8bb1d4ae]:focus-visible,.links a[data-v-8bb1d4ae]:hover{border-color:var(--line-strong)}.links[data-v-8bb1d4ae] .mark,.links[data-v-8bb1d4ae] .rf-mark{width:1.35rem;height:1.35rem;color:var(--dim);flex:none;margin-top:.1rem}.links a[data-v-8bb1d4ae]:hover .mark,.links a[data-v-8bb1d4ae]:hover .rf-mark{color:var(--red)}.links span[data-v-8bb1d4ae]{flex-direction:column;gap:2px;min-width:0;display:flex}.links b[data-v-8bb1d4ae]{font-family:var(--font-display);font-size:.85rem;font-weight:400}.links small[data-v-8bb1d4ae]{color:var(--faint);font-size:.78rem}.colophon[data-v-8bb1d4ae]{color:var(--faint);margin:0;font-size:.75rem}@supports (corner-shape:bevel){.links a[data-v-8bb1d4ae]{corner-shape:bevel}}",{"innerHTML":12},".mark[data-v-cc0d96a5]{vertical-align:-.125em;flex:none;width:1em;height:1em}",{"innerHTML":14},".mark[data-v-26f5673d]{vertical-align:-.125em;flex:none;width:1em;height:1em}",{"innerHTML":16},".rf-mark[data-v-26317b3e]{fill:currentColor;stroke:none;flex:none}",{"id":18,"title":19,"body":20,"description":154,"extension":155,"meta":156,"navigation":157,"order":158,"path":159,"section":160,"seo":161,"stem":162,"__hash__":163},"docs\u002Fdocs\u002Fmobile\u002Fdevice-list.md","Every device descriptor",{"type":21,"value":22,"toc":150},"minimark",[23,36,59,67,70,75,90,107,118,129,133,139,146],[24,25,26,27,31,32,35],"p",{},"The names below are the ones ",[28,29,30],"code",{},"Get Device"," accepts, spelled exactly as it wants\nthem. They are read out of the Playwright that ships with the Browser release\nthis site documents — the version is named above the table — so this is the same\nlist your own ",[28,33,34],{},"Get Devices"," returns, rather than Playwright's newest, which\nwould name devices you cannot use yet.",[37,38,43],"pre",{"className":39,"code":40,"language":41,"meta":42,"style":42},"language-robot shiki shiki-themes github-light github-dark","${device} =    Get Device    iPhone 13\nNew Context    &{device}\n","robot","",[28,44,45,53],{"__ignoreMap":42},[46,47,50],"span",{"class":48,"line":49},"line",1,[46,51,52],{},"${device} =    Get Device    iPhone 13\n",[46,54,56],{"class":48,"line":55},2,[46,57,58],{},"New Context    &{device}\n",[24,60,61,66],{},[62,63,65],"a",{"href":64},"\u002Fdocs\u002Fmobile\u002Fdevices","Emulating a device"," covers what these properties do to a\npage, and the one thing a descriptor cannot give you.",[68,69],"device-table",{},[71,72,74],"h2",{"id":73},"reading-the-table","Reading the table",[24,76,77,81,82,85,86,89],{},[78,79,80],"strong",{},"Viewport"," is the page area in CSS pixels, which is what your layout and your\nmedia queries see. ",[78,83,84],{},"DPR"," is ",[28,87,88],{},"deviceScaleFactor"," — how many device pixels go\ninto one CSS pixel, so a 3 means the phone's screen is three times as fine as\nthe numbers beside it suggest. It changes what a screenshot looks like, not what\na selector finds.",[24,91,92,85,95,98,99,102,103,106],{},[78,93,94],{},"Touch",[28,96,97],{},"hasTouch",", and it is the one to check before writing ",[28,100,101],{},"Tap",": on a\ndescriptor without it, tapping fails. ",[78,104,105],{},"Engine"," is the browser Playwright would\npick if you let it — the descriptors are not tied to it, but a WebKit profile\ndriven through Chromium is a combination that exists nowhere.",[24,108,109,110,113,114,117],{},"The ",[78,111,112],{},"landscape"," entries are separate descriptors rather than a rotation of\ntheir portrait namesake, and on the foldables they are not the same numbers\nturned around. ",[28,115,116],{},"Galaxy Z Fold 6"," is 928 × 1004 upright and 1028 × 876 on its\nside, because the browser's own chrome is a different height each way. Ask for\nthe one you mean.",[24,119,120,121,124,125,128],{},"The seven ",[28,122,123],{},"Desktop"," entries have ",[28,126,127],{},"isMobile"," false and no touch. They set a user\nagent and a viewport and nothing else, which makes them a convenient way to pin\na desktop size without hand-writing a user agent string.",[71,130,132],{"id":131},"what-is-not-in-here","What is not in here",[24,134,135,138],{},[28,136,137],{},"screen"," — the physical screen size, as opposed to the page area — is set on\nabout half of the descriptors and shown under the expander when it exists. Where\nit is absent, Playwright reports the viewport as the screen.",[24,140,141,142,145],{},"Everything else a real handset has is not part of a descriptor: no GPU, no\ntouch hardware, no mobile network, and no platform browser. Chromium pretending\nto be Safari on an iPhone is still Chromium. That distinction, and when it\nstarts to matter, is ",[62,143,144],{"href":64},"on the previous page",".",[147,148,149],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":42,"searchDepth":55,"depth":55,"links":151},[152,153],{"id":73,"depth":55,"text":74},{"id":131,"depth":55,"text":132},"The full list of names Get Device accepts, with the viewport, pixel ratio, touch and engine each one sets — filterable and sortable.","md",{},true,4,"\u002Fdocs\u002Fmobile\u002Fdevice-list","mobile",{"title":19,"description":154},"docs\u002Fmobile\u002Fdevice-list","vJHpxgSO7NJBVYHxHDJmdH57fM2gEPEaqpuCoVR4eVU",[165,171,176,180,185,189,193,198,202,206,210,211,213,217,221,226,230,234,238],{"path":166,"title":167,"description":168,"section":169,"order":170},"\u002Fdocs\u002Fconcepts\u002Farchitecture","How Browser works","Python, a Node process and Playwright — what runs where, and which installation to choose.","concepts",5,{"path":172,"title":173,"description":174,"section":169,"order":175},"\u002Fdocs\u002Fconcepts\u002Fassertions","Assertions","Almost every getter can assert, every assertion retries, and each return type allows different operators. The complete AssertionEngine reference.",3,{"path":177,"title":178,"description":179,"section":169,"order":49},"\u002Fdocs\u002Fconcepts\u002Fbrowser-context-page","Browser, context and page","The three layers Playwright is built on — and why a new context is the cheapest clean slate you will ever get.",{"path":181,"title":182,"description":183,"section":169,"order":184},"\u002Fdocs\u002Fconcepts\u002Flogging","Logging and debugging","Four places Browser tells you what happened — log.html, the Playwright log, traces and coverage.",6,{"path":186,"title":187,"description":188,"section":169,"order":55},"\u002Fdocs\u002Fconcepts\u002Fselectors","Finding elements","Which selector strategy to reach for, why the order matters, and how to chain across iframes and shadow DOM.",{"path":190,"title":191,"description":192,"section":169,"order":158},"\u002Fdocs\u002Fconcepts\u002Fwaiting","Waiting and promises","Most waiting is already done for you. This is the rest of it — Wait For Condition, and how to run keywords in parallel with Promise To.",{"path":194,"title":195,"description":196,"section":197,"order":55},"\u002Fdocs\u002Fextending\u002Fjavascript-basics","Just enough JavaScript","The JavaScript you need to write extensions and Evaluate JavaScript, for people who write Python.","extending",{"path":199,"title":200,"description":201,"section":197,"order":175},"\u002Fdocs\u002Fextending\u002Fjavascript-extensions","JavaScript extensions","Add keywords that run on the Node side with full Playwright access — and attach a debugger to them.",{"path":203,"title":204,"description":205,"section":197,"order":49},"\u002Fdocs\u002Fextending\u002Fpython-plugins","Python plugins","Add or replace keywords from Python, with access to the library's own API and to the Node side.",{"path":207,"title":208,"description":209,"section":197,"order":158},"\u002Fdocs\u002Fextending\u002Ftranslations","Translating keywords","Using a translation package to get keyword names and documentation in your language, and writing one for a language nobody has covered yet.",{"path":159,"title":19,"description":154,"section":160,"order":158},{"path":64,"title":65,"description":212,"section":160,"order":55},"Device descriptors, what the six or seven properties they set actually change, and the one that emulation cannot give you.",{"path":214,"title":215,"description":216,"section":160,"order":49},"\u002Fdocs\u002Fmobile\u002Fresponsive","Testing responsive pages","Why a browser at a phone-sized viewport tests responsiveness properly, what emulation cannot tell you, and where real devices actually belong.",{"path":218,"title":219,"description":220,"section":160,"order":175},"\u002Fdocs\u002Fmobile\u002Ftouch","Touch, permissions and location","Tap and why it needs hasTouch, granting camera or notifications without a dialog, faking where the user is, and the gestures Browser has no keyword for.",{"path":222,"title":223,"description":224,"section":225,"order":175},"\u002Fdocs\u002Foperations\u002Fdocker","Running in Docker","The published Browser image, the four docker run flags that matter, and why running as root breaks Chromium.","operations",{"path":227,"title":228,"description":229,"section":225,"order":158},"\u002Fdocs\u002Foperations\u002Fdocker-images","Building your own image","Extending the published image with your dependencies, the version lock between Browser and Playwright, and using it as a CI job container.",{"path":231,"title":232,"description":233,"section":225,"order":55},"\u002Fdocs\u002Foperations\u002Fenvironment-variables","Environment variables","The variables that change how Browser behaves, which of them are safe in production, and the import parameters that should usually be preferred.",{"path":235,"title":236,"description":237,"section":225,"order":49},"\u002Fdocs\u002Foperations\u002Fnode-process","The Node process","Browser starts a Node process to talk to Playwright. What that costs, how to share one across parallel runs, and how to pass it Node flags.",{"path":239,"title":240,"description":241,"section":242,"order":49},"\u002Fdocs\u002Fstart\u002Fgetting-started","Getting started","Install Browser, write a first test, and run it.","start",[244,247,250],{"to":245,"label":246},"\u002Fwhy\u002Fvs-cypress","vs Cypress",{"to":248,"label":249},"\u002Fwhy\u002Fvs-playwright","vs Playwright Test",{"to":251,"label":252},"\u002Fwhy\u002Fvs-seleniumlibrary","vs SeleniumLibrary",[254],"\u003Cspan class=\"line\">\u003Cspan style=\"color:#96A2A8;font-style:italic\">${device} =    Get Device    iPhone 13\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan style=\"color:#96A2A8;font-style:italic\">New Context    &#x26;{device}\u003C\u002Fspan>\u003C\u002Fspan>",["Island",256],{"key":257,"result":258},"DeviceRows_Pktgj8d0UDqKBYkjdiXK8vvg83kSReqicyrABNQ4pk",{"head":259},{},1786875655964]