[{"data":1,"prerenderedAt":667},["ShallowReactive",2],{"SiteFooter_cLEacilcm59lTjFJjLY6mXNWLL0ETtzOIiZwIHgDpy0":3,"doc-\u002Fdocs\u002Frecording\u002Ftoolbar":17,"docs-nav":536,"nav-compare":655,"editor-16it5z3":665},["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:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--ink);border-bottom: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":527,"extension":528,"meta":529,"navigation":530,"order":293,"path":531,"section":532,"seo":533,"stem":534,"__hash__":535},"docs\u002Fdocs\u002Frecording\u002Ftoolbar.md","The recorder toolbar",{"type":21,"value":22,"toc":514},"minimark",[23,27,49,54,62,96,100,109,119,142,154,158,164,185,190,204,213,222,226,232,240,244,256,274,309,334,338,341,375,385,389,393,404,408,437,447,450,469,473,480,501,510],[24,25,26],"p",{},"The toolbar is how you talk to the recorder: it shows the keyword being recorded\nand every Keyword Call in it, and its buttons start, save, correct and end the\nrecording. It sits on top of every page of the browser context and follows you\nthrough navigation and new tabs.",[28,29,33],"doc-video",{"alt":30,"poster":31,"src":32},"Record Keywords on the Getting started page. The toolbar starts idle; Record keyword opens a dialog where the name Open The Assertions Guide is typed. A click on Assertions is recorded, a click on the page heading is recorded and removed again with Undo, then Save. The toolbar is minimized, its header button Start names a second keyword, Switch The Colour Theme, the theme button is clicked, and the header button Save stores it. The close button ends the session.","\u002Fvideos\u002Frecorder\u002Fsession.jpg","\u002Fvideos\u002Frecorder\u002Fsession.mp4",[24,34,35,39,40,44,45,48],{},[36,37,38],"code",{},"Record Keywords",": two keywords in one session, a mistake undone, and the\nminimized toolbar's ",[41,42,43],"em",{},"Start"," and ",[41,46,47],{},"Save",".",[50,51,53],"h2",{"id":52},"reading-the-toolbar","Reading the toolbar",[55,56,59],"doc-figure",{"alt":57,"src":58},"The recorder toolbar recording Register At The Shop, with the button Pick in its header: three Keyword Calls with the keywords in teal, values in beige and the argument user in orange, the argument list showing user with its default, and the buttons Discard, Undo and Pause.","\u002Fimages\u002Frecorder\u002Ftoolbar-recording.png",[24,60,61],{},"The header names the keyword being recorded and counts its Keyword Calls.",[24,63,64,65,69,70,73,74,77,78,81,82,85,86,89,90,95],{},"The list shows each Keyword Call as it is written into the file, coloured like\nRobot Framework source: ",[66,67,68],"strong",{},"keywords"," in teal, ",[66,71,72],{},"values"," in beige, ",[66,75,76],{},"variables","\nin orange — Keyword Arguments and an assigned ",[36,79,80],{},"${download}",".\nAn escaped value stays a value: ",[36,83,84],{},"\\${HOME}"," and the escaped spaces in ",[36,87,88],{},"two \\ spaces","\nare beige, because Robot reads them as text. Underlined values can become ",[91,92,94],"a",{"href":93},"\u002Fdocs\u002Frecording\u002Farguments","arguments","; the\narguments of the keyword are listed below the calls.",[50,97,99],{"id":98},"a-session-step-by-step","A session, step by step",[24,101,102,104,105,108],{},[36,103,38],{}," opens the toolbar ",[66,106,107],{},"idle",": nothing you do is recorded. Move to\nwhere the first keyword should begin, then:",[55,110,113],{"alt":111,"src":112},"The idle toolbar: no keyword is being recorded, the hint says 0 keywords recorded, and the button Record keyword.","\u002Fimages\u002Frecorder\u002Ftoolbar-idle.png",[24,114,115,116,48],{},"Idle: nothing is recorded until ",[41,117,118],{},"Record keyword",[120,121,122,128,131,136],"ol",{},[123,124,125,127],"li",{},[66,126,118],{}," asks for the name. Type it and press Enter. The dialog\nstays open, dimmed, until the recorder has accepted the name; a name it\nrejects is shown in the dialog with the reason, so you can correct it.",[123,129,130],{},"Work in the page. Every action appears in the toolbar as a Keyword Call and is\nwritten to the file at once.",[123,132,133,135],{},[66,134,47],{}," stores the keyword and returns to idle. Navigate to the next starting\npoint and begin again with step 1.",[123,137,138,141],{},[66,139,140],{},"✕"," in the header ends the session. A keyword still being recorded is saved\nfirst; the test continues with the next line.",[24,143,144,147,148,150,151,153],{},[36,145,146],{},"Record Keyword"," skips step 1 — the name comes from the call — and records from\nthe first moment; ",[41,149,47],{}," or ",[41,152,140],{}," saves the keyword and ends the session.",[50,155,157],{"id":156},"the-buttons","The buttons",[159,160],"doc-table",{":head":161,":rows":162,":nowrap":163},"[\"Button\",\"Where\",\"Does\"]","[[\"**Record keyword**\",\"Body, idle\",\"Names and starts the next keyword. `Record Keywords` only.\"],[\"**Save** ✓\",\"Body, recording\",\"Saves the keyword. `Record Keywords` returns to idle; `Record Keyword` ends the session.\"],[\"**Undo**\",\"Body, recording\",\"Removes the Keyword Calls of the last action — all of them, for an action that produced several, like a download.\"],[\"**⏸** \u002F **▶ Resume**\",\"Body, recording\",\"Pauses the recording: nothing you do is recorded until *Resume*. Use it to set something up by hand in the middle of a keyword.\"],[\"**Discard**\",\"Body, recording\",\"Drops the keyword, also from the file. `Record Keyword` starts it again empty; `Record Keywords` returns to idle.\"],[\"**Pick**\",\"Header, recording\",\"Picks an element on the page and adds its selector to the keyword as a comment — see [Picking a selector](#picking-a-selector).\"],[\"**–** \u002F **+**\",\"Header\",\"Minimizes the toolbar to its header, or expands it.\"],[\"**Start** \u002F **Save**\",\"Header, minimized\",\"The main action stays one click away while the toolbar is small. *Start* is for `Record Keywords` only.\"],[\"**✕**\",\"Header\",\"Ends the session. The keyword being recorded is saved.\"]]","[0,1]",[24,165,166,167,169,170,169,173,169,175,44,178,181,182,184],{},"Every button has a tooltip. After ",[41,168,47],{},", ",[41,171,172],{},"Discard",[41,174,43],{},[41,176,177],{},"Pause",[41,179,180],{},"Resume"," the toolbar waits\na moment before it acts: Playwright reports a click half a second late, and a\nclick made just before ",[41,183,47],{}," still belongs to the keyword. If you have not\nclicked in the page for a second, there is no wait.",[186,187,189],"h3",{"id":188},"pause-and-resume","Pause and Resume",[24,191,192,195,196,199,200,203],{},[66,193,194],{},"⏸"," stops recording without ending the keyword: nothing you do is recorded\nuntil ",[66,197,198],{},"▶ Resume",". Use it to set something up by hand — accept a cookie banner,\nopen a menu, log in with a real account — in the middle of a keyword. The header\nsays ",[41,201,202],{},"paused",", and the indicator turns orange.",[28,205,210],{"alt":206,"poster":207,"src":208,":controls":209},"The user name demo is typed and recorded. Pause is pressed; the password typed next is not recorded and the toolbar shows paused. Resume is pressed, and the click on login is recorded again.","\u002Fvideos\u002Frecorder\u002Floop-pause.jpg","\u002Fvideos\u002Frecorder\u002Floop-pause.mp4","false",[24,211,212],{},"Typed while paused, the password never reaches the keyword.",[24,214,215,216,218,219,221],{},"A click made just before ",[41,217,177],{}," still belongs to the keyword; one made just\nbefore ",[41,220,180],{}," does not.",[186,223,225],{"id":224},"undo-and-discard","Undo and Discard",[24,227,228,231],{},[41,229,230],{},"Undo"," takes back the last action, as often as you like. It removes Keyword Calls;\nit does not reverse what the action did to the page. After undoing a click that\nnavigated, you are still on the new page — continue from there, or go back, and\ncheck that the toolbar lists what you expect before you go on.",[24,233,234,236,237,239],{},[41,235,172],{}," throws the whole keyword away. In ",[36,238,38],{}," the session goes on,\nidle, so you can start the keyword again from a better starting point.",[186,241,243],{"id":242},"picking-a-selector","Picking a selector",[24,245,246,247,250,251,255],{},"Some selectors are not for a click: an element the keyword should check or wait\nfor later. ",[66,248,249],{},"Pick"," gets one without leaving the recording. The Keyword Calls\nmake way for the panel of ",[91,252,254],{"href":253},"\u002Fdocs\u002Frecording\u002Fselectors","Record Selector"," — Playwright's\nor a CSS selector, editable, with its count on the page — and nothing you do is\nrecorded while it is open.",[257,258,259,268],"ul",{},[123,260,261,264,265,267],{},[66,262,263],{},"Use"," adds the selector to the keyword as a comment, ready for the line you\nwrite by hand later. ",[41,266,230],{}," removes it like a Keyword Call.",[123,269,270,273],{},[66,271,272],{},"Cancel"," returns to recording without it.",[275,276,281],"pre",{"className":277,"code":278,"language":279,"meta":280,"style":280},"language-robot shiki shiki-themes github-light github-dark","*** Keywords ***\nLog In\n    Fill Text    role=textbox[name*=\"username\"i]    demo\n    # Picked Selector    role=heading[name*=\"Welcome\"i]\n","robot","",[36,282,283,291,297,303],{"__ignoreMap":280},[284,285,288],"span",{"class":286,"line":287},"line",1,[284,289,290],{},"*** Keywords ***\n",[284,292,294],{"class":286,"line":293},2,[284,295,296],{},"Log In\n",[284,298,300],{"class":286,"line":299},3,[284,301,302],{},"    Fill Text    role=textbox[name*=\"username\"i]    demo\n",[284,304,306],{"class":286,"line":305},4,[284,307,308],{},"    # Picked Selector    role=heading[name*=\"Welcome\"i]\n",[24,310,311,312,315,316,44,319,321,322,324,325,169,327,169,329,44,331,333],{},"Recording goes on either way. The pick works in the tab whose toolbar you\npressed it in. Playwright's own ",[41,313,314],{},"Pick locator"," opens the same panel, in the tab\nyou last clicked in; while the toolbar is idle, it asks you to start a keyword\nfirst.\nMinimized, the header offers ",[41,317,318],{},"Reselect",[41,320,263],{}," once an element is picked and\n",[41,323,272],{}," throughout; ",[41,326,47],{},[41,328,172],{},[41,330,230],{},[41,332,177],{}," wait until the pick is\nused or cancelled.",[50,335,337],{"id":336},"naming-keywords","Naming keywords",[24,339,340],{},"A name is rejected — in the dialog, with the reason — when it:",[257,342,343,346,357],{},[123,344,345],{},"already exists in the target file, or was recorded earlier in the session;",[123,347,348,349,352,353,356],{},"would ",[66,350,351],{},"shadow"," a keyword the suite can already call, such as ",[36,354,355],{},"Click"," or a\nkeyword of one of your resources;",[123,358,359,360,363,364,150,367,370,371,374],{},"cannot be a single Robot Framework name: two spaces in a row, a leading ",[36,361,362],{},"#",",\n",[36,365,366],{},"*",[36,368,369],{},"|",", variable syntax like ",[36,372,373],{},"${x}",", line breaks or tabs, or more than 200\ncharacters.",[24,376,377,378,363,381,384],{},"Name keywords after what they do for the test — ",[36,379,380],{},"Add Product To Cart",[36,382,383],{},"Open The Assertions Guide"," — not after the page they happen on.",[50,386,388],{"id":387},"ending-a-session","Ending a session",[159,390],{":head":391,":rows":392},"[\"What ends it\",\"The keyword being recorded\"]","[[\"**✕** in the toolbar, or *Save* in `Record Keyword`\",\"Saved\"],[\"Playwright's **Record** button (the red circle at the top centre)\",\"Saved\"],[\"No action and no toolbar command for `idle_timeout` (default 5 minutes)\",\"Saved\"],[\"All pages of the context closed, or the context itself\",\"Saved\"],[\"An error\",\"Saved, then the keyword fails\"]]",[24,394,395,396,399,400,403],{},"A keyword without any Keyword Call is never written. The idle timeout keeps a\nforgotten recording from blocking a run for good; set it with\n",[36,397,398],{},"idle_timeout=15 min",", or to ",[36,401,402],{},"${None}"," to wait without limit.",[50,405,407],{"id":406},"keeping-it-out-of-the-way","Keeping it out of the way",[257,409,410,416,422],{},[123,411,412,415],{},[66,413,414],{},"Move"," the toolbar by dragging its header. It stays where you put it, also\nacross navigation and reloads, and sits flush against any edge you push it to.",[123,417,418,421],{},[66,419,420],{},"Resize"," it with the grip in its bottom right corner; by default it grows\nwith the longest Keyword Call.",[123,423,424,427,428,431,432,150,434,436],{},[66,425,426],{},"Minimize"," it with ",[66,429,430],{},"–","; the header then offers ",[41,433,43],{},[41,435,47],{},", so the\nmain action stays one click away.",[55,438,441],{"alt":439,"src":440},"The minimized toolbar: only its header, with the state Idle, the button Start, and the buttons to expand and to close.","\u002Fimages\u002Frecorder\u002Ftoolbar-minimized.png",[24,442,443,444,446],{},"Minimized and idle: ",[41,445,43],{}," names the next keyword.",[24,448,449],{},"Typing in the toolbar never reaches the page: its shortcuts and type-ahead do not\nfire while you name a keyword. Nor is anything you do in the toolbar recorded — a\nresize released over the page, or keys pressed after a click on the toolbar's\ntext. A modal dialog of the page — one that disables\nclicks outside itself, traps the focus or closes on a click outside — does not\nblock the toolbar either, and using the toolbar does not close it.",[451,452,454],"doc-note",{"kind":453},"warning",[24,455,456,457,460,461,464,465,468],{},"A ",[66,458,459],{},"native"," modal ",[36,462,463],{},"\u003Cdialog>"," (opened with ",[36,466,467],{},"showModal()",") makes everything else on\nthe page inert, the toolbar included. Close the dialog to use the toolbar again.",[50,470,472],{"id":471},"next-to-playwrights-toolbar","Next to Playwright's toolbar",[24,474,475,476,479],{},"During a session you also see ",[66,477,478],{},"Playwright's own toolbar"," at the top centre of\nthe page. It cannot be hidden, and two of its tools are useful:",[257,481,482,494],{},[123,483,484,485,488,489,493],{},"the ",[66,486,487],{},"assertion tools"," (eye, text, value, snapshot) record checks — see\n",[91,490,492],{"href":491},"\u002Fdocs\u002Frecording\u002Fwhat-gets-recorded#assertions","Assertions",";",[123,495,496,497,500],{},"its ",[66,498,499],{},"Record"," button ends the session, like ✕.",[24,502,503,504,506,507,48],{},"Its ",[41,505,314],{}," opens the toolbar's own picker — see\n",[91,508,243],{"href":509},"#picking-a-selector",[511,512,513],"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":280,"searchDepth":293,"depth":293,"links":515},[516,517,518,523,524,525,526],{"id":52,"depth":293,"text":53},{"id":98,"depth":293,"text":99},{"id":156,"depth":293,"text":157,"children":519},[520,521,522],{"id":188,"depth":299,"text":189},{"id":224,"depth":299,"text":225},{"id":242,"depth":299,"text":243},{"id":336,"depth":293,"text":337},{"id":387,"depth":293,"text":388},{"id":406,"depth":293,"text":407},{"id":471,"depth":293,"text":472},"Name and start keywords, save, undo and discard them, end the session, and keep the toolbar out of the page's way.","md",{},true,"\u002Fdocs\u002Frecording\u002Ftoolbar","recording",{"title":19,"description":527},"docs\u002Frecording\u002Ftoolbar","0YxZwnpqxJhMsv1V3X4odk-FnPCvIkoVo1SDnmgLZ3g",[537,543,546,550,555,559,563,568,572,576,580,584,588,593,597,601,605,610,614,618,622,625,629,634,638,641,642,646,651],{"path":538,"title":539,"description":540,"section":541,"order":542},"\u002Fdocs\u002Fconcepts\u002Farchitecture","How Browser works","Python, a Node process and Playwright — what runs where, and where the files land.","concepts",5,{"path":544,"title":492,"description":545,"section":541,"order":299},"\u002Fdocs\u002Fconcepts\u002Fassertions","Almost every getter can assert, every assertion retries, and each return type allows different operators. The complete AssertionEngine reference.",{"path":547,"title":548,"description":549,"section":541,"order":287},"\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":551,"title":552,"description":553,"section":541,"order":554},"\u002Fdocs\u002Fconcepts\u002Flogging","Logging and debugging","Four places Browser tells you what happened — log.html, the Playwright log, traces and coverage.",6,{"path":556,"title":557,"description":558,"section":541,"order":293},"\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":560,"title":561,"description":562,"section":541,"order":305},"\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":564,"title":565,"description":566,"section":567,"order":542},"\u002Fdocs\u002Fextending\u002Fbrowser-as-a-base","Browser as a base","Own the Browser instance in your own library — what you get free, what one line restores, and what you build yourself.","extending",{"path":569,"title":570,"description":571,"section":567,"order":293},"\u002Fdocs\u002Fextending\u002Fjavascript-basics","Just enough JavaScript","The JavaScript you need to write extensions and Evaluate JavaScript, for people who write Python.",{"path":573,"title":574,"description":575,"section":567,"order":299},"\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":577,"title":578,"description":579,"section":567,"order":305},"\u002Fdocs\u002Fextending\u002Fpython-libraries","Your own Python library","Move business logic out of Robot Framework and keep Browser exactly as it is.",{"path":581,"title":582,"description":583,"section":567,"order":287},"\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":585,"title":586,"description":587,"section":567,"order":554},"\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":589,"title":590,"description":591,"section":592,"order":305},"\u002Fdocs\u002Fmobile\u002Fdevice-list","Every device descriptor","The full list of names Get Device accepts, with the viewport, pixel ratio, touch and engine each one sets — filterable and sortable.","mobile",{"path":594,"title":595,"description":596,"section":592,"order":293},"\u002Fdocs\u002Fmobile\u002Fdevices","Emulating a device","Device descriptors, what the six or seven properties they set actually change, and the one that emulation cannot give you.",{"path":598,"title":599,"description":600,"section":592,"order":287},"\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":602,"title":603,"description":604,"section":592,"order":299},"\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":606,"title":607,"description":608,"section":609,"order":299},"\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":611,"title":612,"description":613,"section":609,"order":305},"\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":615,"title":616,"description":617,"section":609,"order":293},"\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":619,"title":620,"description":621,"section":609,"order":287},"\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":93,"title":623,"description":624,"section":532,"order":299},"Keyword arguments","Turn a recorded value, part of it or part of a selector into an argument while you record — with or without a default, and everywhere it occurs.",{"path":626,"title":627,"description":628,"section":532,"order":542},"\u002Fdocs\u002Frecording\u002Ffiles","Where recorded keywords go","The suite file, a resource file or only the log; written live after every action; what the recorder changes in a file and what it never touches.",{"path":630,"title":631,"description":632,"section":532,"order":633},"\u002Fdocs\u002Frecording\u002Fpractice","Good practice and limits","How to record keywords worth keeping, what to check before you commit one, what the recorder cannot do, and what to do when it goes wrong.",7,{"path":635,"title":636,"description":637,"section":532,"order":287},"\u002Fdocs\u002Frecording\u002Frecord-keywords","Recording keywords","Click through the page and get a reusable user keyword, written into your suite while you work. Record Keyword and Record Keywords in five minutes.",{"path":253,"title":639,"description":640,"section":532,"order":554},"Recording selectors","Pick an element in the live browser and get a selector for it — Playwright's or a CSS one, checked against the page while you edit it.",{"path":531,"title":19,"description":527,"section":532,"order":293},{"path":643,"title":644,"description":645,"section":532,"order":305},"\u002Fdocs\u002Frecording\u002Fwhat-gets-recorded","What gets recorded","Which Browser keyword each action becomes, how popups, dialogs, downloads and uploads are handled, recording assertions, and the selectors the recorder writes.",{"path":647,"title":648,"description":649,"section":650,"order":293},"\u002Fdocs\u002Fstart\u002Fgetting-started","Getting started","Install Browser, write a first test, and run it.","start",{"path":652,"title":653,"description":654,"section":650,"order":287},"\u002Fdocs\u002Fstart\u002Finstallation","Installation","The two ways to install Browser — with a bundled Node.js runtime, or with one you provide yourself — and how to upgrade and remove each.",[656,659,662],{"to":657,"label":658},"\u002Fwhy\u002Fvs-cypress","vs Cypress",{"to":660,"label":661},"\u002Fwhy\u002Fvs-playwright","vs Playwright Test",{"to":663,"label":664},"\u002Fwhy\u002Fvs-seleniumlibrary","vs SeleniumLibrary",[666],"\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF6B5E;font-weight:bold\">*** Keywords ***\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan style=\"color:#2BD9CC\">Log In\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan style=\"color:#2BD9CC\">    Fill Text\u003C\u002Fspan>\u003Cspan style=\"color:#E0D3A3\">    role=textbox[name*=\"username\"i]\u003C\u002Fspan>\u003Cspan style=\"color:#E0D3A3\">    demo\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan style=\"color:#A9B4BA;font-style:italic\">    # Picked Selector    role=heading[name*=\"Welcome\"i]\u003C\u002Fspan>\u003C\u002Fspan>",1793560509094]