1"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4913],{22002:(e,d,s)=>{s.d(d,{R:()=>t,x:()=>c});var r=s(7378);const n={},i=r.createContext(n);function t(e){const d=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(d):{...d,...e}},[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),r.createElement(i.Provider,{value:d},e.children)}},48400:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>t,metadata:()=>r,toc:()=>h});const r=JSON.parse('{"id":"mcp/tools","title":"Tools","description":"The WebdriverIO MCP server exposes 29 tools organized by function. Tools marked browser-only require a platform \\"ios\\" or platform: \\"android\\".","source":"@site/docs/mcp/tools.md","sourceDirName":"mcp","slug":"/mcp/tools","permalink":"/docs/mcp/tools","draft":false,"unlisted":false,"editUrl":"https://github.com/webdriverio/webdriverio/edit/main/website/docs/mcp/tools.md","tags":[],"version":"current","frontMatter":{"id":"tools","title":"Tools"},"sidebar":"docs","previous":{"title":"Selectors","permalink":"/docs/mcp/selectors"},"next":{"title":"Resources","permalink":"/docs/mcp/resources"}}');var n=s(86106),i=s(22002);const t={id:"tools",title:"Tools"},c=void 0,l={},h=[{value:"Session Management",id:"session-management",level:2},{value:"<code>start_session</code>",id:"start_session",level:3},{value:"<code>close_session</code>",id:"close_session",level:3},{value:"<code>launch_chrome</code>",id:"launch_chrome",level:3},{value:"Navigation & Tabs",id:"navigation--tabs",level:2},{value:"<code>navigate</code>",id:"navigate",level:3},{value:"<code>get_tabs</code>",id:"get_tabs",level:3},{value:"<code>switch_tab</code>",id:"switch_tab",level:3},{value:"<code>switch_frame</code>",id:"switch_frame",level:3},{value:"Element Interaction",id:"element-interaction",level:2},{value:"<code>click_element</code>",id:"click_element",level:3},{value:"<code>set_value</code>",id:"set_value",level:3},{value:"<code>scroll</code>",id:"scroll",level:3},{value:"Element Analysis",id:"element-analysis",level:2},{value:"<code>get_elements</code>",id:"get_elements",level:3},{value:"<code>get_accessibility_tree</code>",id:"get_accessibility_tree",level:3},{value:"Screenshots",id:"screenshots",level:2},{value:"<code>get_screenshot</code>",id:"get_screenshot",level:3},{value:"Cookie Management",id:"cookie-management",level:2},{value:"<code>get_cookies</code>",id:"get_cookies",level:3},{value:"<code>set_cookie</code>
1",id:"set_cookie",level:3},{value:"<code>delete_cookies</code>",id:"delete_cookies",level:3},{value:"Touch Gestures (Mobile)",id:"touch-gestures-mobile",level:2},{value:"<code>tap_element</code>",id:"tap_element",level:3},{value:"<code>swipe</code>",id:"swipe",level:3},{value:"<code>drag_and_drop</code>",id:"drag_and_drop",level:3},{value:"Context Switching (Mobile)",id:"context-switching-mobile",level:2},{value:"<code>get_contexts</code>",id:"get_contexts",level:3},{value:"<code>switch_context</code>",id:"switch_context",level:3},{value:"Device Control (Mobile)",id:"device-control-mobile",level:2},{value:"<code>rotate_device</code>",id:"rotate_device",level:3},{value:"<code>hide_keyboard</code>",id:"hide_keyboard",level:3},{value:"<code>set_geolocation</code>",id:"set_geolocation",level:3},{value:"App Lifecycle (Mobile)",id:"app-lifecycle-mobile",level:2},{value:"<code>get_app_state</code>",id:"get_app_state",level:3},{value:"Browser Utilities",id:"browser-utilities",level:2},{value:"<code>emulate_device</code>",id:"emulate_device",level:3},{value:"<code>execute_script</code>",id:"execute_script",level:3},{value:"Cloud Providers",id:"cloud-providers",level:2},{value:"<code>list_apps</code>",id:"list_apps",level:3},{value:"<code>upload_app</code>",id:"upload_app",level:3}];function o(e){const d={code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(d.p,{children:["The WebdriverIO MCP server exposes 29 tools organized by function. Tools marked ",(0,n.jsx)(d.strong,{children:"browser-only"})," require a ",(0,n.jsx)(d.code,{children:'platform: "browser"'})," session. Tools marked ",(0,n.jsx)(d.strong,{children:"mobile-only"})," require ",(0,n.jsx)(d.code,{children:'platform: "ios"'})," or ",(0,n.jsx)(d.code,{children:'platform: "android"'}),"."]}),"\n",(0,n.jsx)(d.h2,{id:"session-management",children:"Session Management"}),"\n",(0,n.jsx)(d.h3,{id:"start_session",children:(0,n.jsx)(d.code,{children:"start_session"})}),"\n",(0,n.jsx)(d.p,{children:"Starts a new browser or mobile automation session. Only one active session at a time; starting a new one closes the existing one."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"platform"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"browser" | "ios" | "android"'})}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Session platform"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"provider"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"local" | "browserstack" | "saucelabs" | "testmu" | "testingbot"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"local"'})}),(0,n.jsx)(d.td,{children:"Session provider"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"browser"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"chrome" | "firefox" | "edge" | "safari"'})}),(0,n.jsx)(d.td,{children:"browser only"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Browser to launch"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"browserVersion"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"latest"}),(0,n.jsx)(d.td,{children:"Browser version (cloud providers only, default: latest)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"os"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Operating system (cloud providers only, e.g. ",(0,n.jsx)(d.code,{children:'"Windows"'}),", ",(0,n.jsx)(d.code,{children:'"OS X"'}),")"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"osVersion"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["OS version (cloud providers only, e.g. ",(0,n.jsx)(d.code,{children:'"11"'}),", ",(0,n.jsx)(d.code,{children:'"Sequoia"'}),")"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"headless"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"true"})}),(0,n.jsx)(d.td,{children:"Run browser headlessly"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"windowWidth"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"1920"})}),(0,n.jsx)(d.td,{children:"Browser window width (400\u20133840)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"windowHeight"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"1080"})}),(0,n.jsx)(d.td,{children:"Browser window height (400\u20132160)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"navigationUrl"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"URL to navigate to after starting"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"deviceName"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"mobile only"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Device/emulator/simulator name"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"platformVersion"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["OS version (e.g. ",(0,n.jsx)(d.code,{children:'"17.0"'}),", ",(0,n.jsx)(d.code,{children:'"14"'}),")"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"appPath"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Path to ",(0,n.jsx)(d.code,{children:".app"})," / ",(0,n.jsx)(d.code,{children:".apk"})," / ",(0,n.jsx)(d.code,{children:".ipa"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"app"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["App URL (",(0,n.jsx)(d.code,{children:"bs://..."})," for BrowserStack, ",(0,n.jsx)(d.code,{children:"storage:filename="})," for Sauce Labs, ",(0,n.jsx)(d.code,{children:"lt://..."})," for TestMu, TestingBot app_url) or custom_id"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"automationName"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"XCUITest" | "UiAutomator2"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"auto"}),(0,n.jsx)(d.td,{children:"Automation driver"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"autoGrantPermissions"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"true"})}),(0,n.jsx)(d.td,{children:"Auto-grant app permissions"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"autoAcceptAlerts"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"true"})}),(0,n.jsx)(d.td,{children:"Auto-accept alerts"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"autoDismissAlerts"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Auto-dismiss alerts"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"appWaitActivity"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Android activity to wait for on launch"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"udid"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"iOS real device UDID"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"noReset"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Preserve app data between sessions"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"fullReset"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Uninstall app before/after session"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"newCommandTimeout"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"300"})}),(0,n.jsx)(d.td,{children:"Appium command timeout (seconds)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"attach"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Attach to existing Chrome via CDP"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"attachConfig"})}),(0,n.jsx)(d.td,{children:"object"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["CDP connection: ",(0,n.jsx)(d.code,{children:'{ port: 9222, host: "localhost" }'})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"appiumConfig"})}),(0,n.jsx)(d.td,{children:"object"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Appium server: ",(0,n.jsx)(d.code,{children:"{ host, port, path }"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"tunnel"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'boolean | "external"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsxs)(d.td,{children:["Local tunnel routing (cloud providers). ",(0,n.jsx)(d.code,{children:"true"})," = auto-start, ",(0,n.jsx)(d.code,{children:'"external"'})," = tunnel already running externally"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"reporting"})}),(0,n.jsx)(d.td,{children:"object"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Cloud provider reporting labels: ",(0,n.jsx)(d.code,{children:"{ project, build, session }"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"trace"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsxs)(d.td,{children:["Enable trace recording \u2014 produces a Playwright-compatible ",(0,n.jsx)(d.code,{children:".trace"})," zip"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"region"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"us-west-1" | "eu-central-1" | "apac-southeast-1"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"eu-central-1"'})}),(0,n.jsx)(d.td,{children:"Sauce Labs data center region"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"tunnelName"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Tunnel identifier name (required for ",(0,n.jsx)(d.code,{children:'tunnel: "external"'}),")"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"capabilities"})}),(0,n.jsx)(d.td,{children:"object"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Additional raw capabilities to merge"})]})]})]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{children:'// Local Chrome browser\nstart_session({ platform: "browser", browser: "chrome" })\n\n// iOS simulator\nstart_session({ platform: "ios", deviceName: "iPhone 16", platformVersion: "18.0", appPath: "/path/to/app.app" })\n\n// BrowserStack Android\nstart_session({ platform: "android", provider: "browserstack", deviceName: "Samsung Galaxy S24", app: "b
1s://abc123" })\n\n// Sauce Labs iOS\nstart_session({ platform: "ios", provider: "saucelabs", deviceName: "iPhone 15", platformVersion: "17.0", app: "storage:filename=MyApp.ipa" })\n\n// TestMu browser\nstart_session({ platform: "browser", provider: "testmu", browser: "chrome", os: "Windows", osVersion: "11" })\n\n// TestingBot browser\nstart_session({ platform: "browser", provider: "testingbot", browser: "chrome", os: "Windows", osVersion: "11" })\n\n// Cloud provider with tunnel\nstart_session({ platform: "browser", provider: "browserstack", browser: "chrome", tunnel: true })\n\n// Attach to existing Chrome (after launch_chrome)\nstart_session({ platform: "browser", browser: "chrome", attach: true })\n'})}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"close_session",children:(0,n.jsx)(d.code,{children:"close_session"})}),"\n",(0,n.jsx)(d.p,{children:"Closes or detaches from the current session."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"detach"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Disconnect without terminating (preserves app state on Appium)"})]})})]}),"\n",(0,n.jsxs)(d.p,{children:["Sessions started with ",(0,n.jsx)(d.code,{children:"noReset: true"})," auto-detach by default."]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"launch_chrome",children:(0,n.jsx)(d.code,{children:"launch_chrome"})}),"\n",(0,n.jsxs)(d.p,{children:["Prepares a Chrome instance with remote debugging enabled so ",(0,n.jsx)(d.code,{children:"start_session({ attach: true })"})," can connect. Two modes:"]}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"newInstance"})," (default): opens Chrome alongside your existing one using a separate profile directory; your current session is untouched."]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"freshSession"}),": launches Chrome with an empty profile (no cookies, no logins). Use ",(0,n.jsx)(d.code,{children:"copyProfileFiles: true"})," to carry over cookies and logins."]}),"\n"]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"port"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"9222"})}),(0,n.jsx)(d.td,{children:"Remote debugging port"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"mode"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"newInstance" | "freshSession"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"newInstance"'})}),(0,n.jsx)(d.td,{children:"Launch mode"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"copyProfileFiles"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Copy Chrome Default profile (cookies, logins) into debug session"})]})]})]}),"\n",(0,n.jsxs)(d.p,{children:["After this tool succeeds, call ",(0,n.jsx)(d.code,{children:'start_session({ platform: "browser", browser: "chrome", attach: true })'}),"."]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"navigation--tabs",children:"Navigation & Tabs"}),"\n",(0,n.jsx)(d.h3,{id:"navigate",children:(0,n.jsx)(d.code,{children:"navigate"})}),"\n",(0,n.jsxs)(d.p,{children:["Loads a URL in the current tab and waits for the page load event. Resets page state (DOM, JS runtime). ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"url"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"URL to navigate to"})]})})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"get_tabs",children:(0,n.jsx)(d.code,{children:"get_tabs"})}),"\n",(0,n.jsxs)(d.p,{children:["Lists all browser tabs with handle, title, URL, and which is active. Use before ",(0,n.jsx)(d.code,{children:"switch_tab"})," to find the target handle. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsx)(d.p,{children:"No parameters."}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"switch_tab",children:(0,n.jsx)(d.code,{children:"switch_tab"})}),"\n",(0,n.jsxs)(d.p,{children:["Focuses a browser tab by window handle or 0-based index. All subsequent tool calls operate on the newly active tab. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"handle"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Window handle to switch to"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"index"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"0-based tab index (\u2265 0)"})]})]})]}),"\n",(0,n.jsxs)(d.p,{children:["Provide either ",(0,n.jsx)(d.code,{children:"handle"})," or ",(0,n.jsx)(d.code,{children:"index"}),". Get handles from ",(0,n.jsx)(d.code,{children:"get_tabs"})," or ",(0,n.jsx)(d.code,{children:"wdio://session/current/tabs"}),"."]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"switch_frame",children:(0,n.jsx)(d.code,{children:"switch_frame"})}
1),"\n",(0,n.jsxs)(d.p,{children:["Switches WebDriver frame context into an iframe by CSS/XPath selector, or back to top-level if selector is omitted. Changes persist; all subsequent ",(0,n.jsx)(d.code,{children:"click_element"}),", ",(0,n.jsx)(d.code,{children:"set_value"}),", ",(0,n.jsx)(d.code,{children:"get_elements"})," calls operate within the switched frame until you switch back. Waits up to 5s for the iframe. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"selector"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"CSS/XPath selector for the iframe element. Omit to switch back to the top-level frame."})]})})]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{children:'// Switch into an iframe\nswitch_frame({ selector: "#my-iframe" })\n\n// Interact with elements inside the iframe\nclick_element({ selector: "button.submit" })\n\n// Switch back to top-level\nswitch_frame()\n'})}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"element-interaction",children:"Element Interaction"}),"\n",(0,n.jsx)(d.h3,{id:"click_element",children:(0,n.jsx)(d.code,{children:"click_element"})}),"\n",(0,n.jsxs)(d.p,{children:["Waits for an element to exist, scrolls it into view, and clicks it. Works on browser and mobile. On iOS, prefer ",(0,n.jsx)(d.code,{children:"tap_element"}),"; ",(0,n.jsx)(d.code,{children:"click_element"})," is sometimes ignored by the native layer."]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"selector"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"CSS, XPath, or text selector"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"scrollToView"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"true"})}),(0,n.jsx)(d.td,{children:"Scroll element into view before clicking"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"timeout"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Max wait time (ms)"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"set_value",children:(0,n.jsx)(d.code,{children:"set_value"})}),"\n",(0,n.jsx)(d.p,{children:"Clears an input or textarea and types the given text. Always replaces existing content."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"selector"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"CSS, XPath, or text selector"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"value"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Text to type"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"scrollToView"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"true"})}),(0,n.jsx)(d.td,{children:"Scroll element into view before typing"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"timeout"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Max wait time (ms)"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"scroll",children:(0,n.jsx)(d.code,{children:"scroll"})}
1),"\n",(0,n.jsxs)(d.p,{children:["Scrolls the page by a number of pixels. ",(0,n.jsx)(d.strong,{children:"Browser-only."})," For mobile, use ",(0,n.jsx)(d.code,{children:"swipe"}),"."]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"direction"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"up" | "down"'})}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Scroll direction"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"pixels"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"500"})}),(0,n.jsx)(d.td,{children:"Pixels to scroll"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"element-analysis",children:"Element Analysis"}),"\n",(0,n.jsx)(d.h3,{id:"get_elements",children:(0,n.jsx)(d.code,{children:"get_elements"})}),"\n",(0,n.jsxs)(d.p,{children:["Returns interactable elements on the current page with selectors ready to use. Prefer the ",(0,n.jsx)(d.code,{children:"wdio://session/current/elements"})," resource for ambient awareness; use this tool when you need filtering or pagination."]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"inViewportOnly"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Only return viewport-visible elements"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"includeContainers"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Include container elements (divs, sections)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"includeBounds"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"Include bounding box coordinates"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"limit"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"0"})}),(0,n.jsx)(d.td,{children:"Max elements to return (0 = unlimited)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"offset"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"0"})}),(0,n.jsx)(d.td,{children:"Elements to skip (pagination)"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"get_accessibility_tree",children:(0,n.jsx)(d.code,{children:"get_accessibility_tree"})}),"\n",(0,n.jsxs)(d.p,{children:["Returns the page accessibility tree with roles, names, and selectors. Supports filtering and pagination. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"limit"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"0"})}),(0,n.jsx)(d.td,{children:"Max nodes to return (0 = unlimited)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"offset"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"0"})}),(0,n.jsx)(d.td,{children:"Nodes to skip (pagination)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"roles"})}),(0,n.jsx)(d.td,{children:"string[]"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Filter by ARIA roles, e.g. ",(0,n.jsx)(d.code,{children:'["button", "link", "heading"]'})]})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"screenshots",children:"Screenshots"}),"\n",(0,n.jsx)(d.h3,{id:"get_screenshot",children:(0,n.jsx)(d.code,{children:"get_screenshot"})}),"\n",(0,n.jsx)(d.p,{children:"Takes a screenshot of the current page or screen. Returns a base64-encoded image, automatically resized and compressed to stay within model context limits (max 1 MB, max 2000px)."}),"\n",(0,n.jsxs)(d.p,{children:["No parameters. Prefer ",(0,n.jsx)(d.code,{children:"wdio://session/current/elements"})," over screenshots for element discovery; it's faster and uses far fewer tokens. Use screenshots for visual verification or debugging layout."]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"cookie-management",children:"Cookie Management"}),"\n",(0,n.jsx)(d.h3,{id:"get_cookies",children:(0,n.jsx)(d.code,{children:"get_cookies"})}),"\n",(0,n.jsxs)(d.p,{children:["Returns all cookies for the current session, or a single cookie by name. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"name"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Cookie name. Omit to return all cookies."})]})})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"set_cookie",children:(0,n.jsx)(d.code,{children:"set_cookie"})}),"\n",(0,n.jsxs)(d.p,{children:["Sets a browser cookie. The browser must already be on the target domain \u2014 cookies cannot be set cross-domain. Use to inject session tokens or feature flags without going through login flows. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"name"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"Cookie name"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"value"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"Cookie value"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"domain"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Cookie domain (defaults to current domain)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"path"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Cookie path (defaults to ",(0,n.jsx)(d.code,{children:"/"}),")"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"expiry"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Expiry as Unix timestamp (seconds)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"httpOnly"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"HttpOnly flag"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"secure"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Secure flag"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"sameSite"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"strict" | "lax" | "none"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"SameSite attribute"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"delete_cookies",children:(0,n.jsx)(d.code,{children:"delete_cookies"})}),"\n",(0,n.jsxs)(d.p,{children:["Deletes all cookies or a specific cookie by name. ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"name"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Cookie name to delete. Omit to delete all c
1ookies."})]})})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"touch-gestures-mobile",children:"Touch Gestures (Mobile)"}),"\n",(0,n.jsx)(d.h3,{id:"tap_element",children:(0,n.jsx)(d.code,{children:"tap_element"})}),"\n",(0,n.jsxs)(d.p,{children:["Calls ",(0,n.jsx)(d.code,{children:"element.tap()"})," on a matched element or taps at absolute screen coordinates. Use on iOS when ",(0,n.jsx)(d.code,{children:"click_element"})," is ignored; tap is the native gesture iOS responds to. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"selector"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Element selector"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"x"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"X coordinate for screen tap (if no selector)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"y"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Y coordinate for screen tap (if no selector)"})]})]})]}),"\n",(0,n.jsxs)(d.p,{children:["Provide either ",(0,n.jsx)(d.code,{children:"selector"})," or ",(0,n.jsx)(d.code,{children:"x"}),"/",(0,n.jsx)(d.code,{children:"y"})," coordinates."]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"swipe",children:(0,n.jsx)(d.code,{children:"swipe"})}),"\n",(0,n.jsxs)(d.p,{children:["Performs a full-screen swipe gesture. Direction is content movement direction (e.g. ",(0,n.jsx)(d.code,{children:'"up"'})," scrolls a list upward). Use for scrolling beyond visible bounds. For moving a specific element, use ",(0,n.jsx)(d.code,{children:"drag_and_drop"}),". ",(0,n.jsx)(d.strong,{children:"Mobile-only."})," For browsers, use ",(0,n.jsx)(d.code,{children:"scroll"}),"."]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"direction"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"up" | "down" | "left" | "right"'})}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Swipe direction"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"duration"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"500"})}),(0,n.jsx)(d.td,{children:"Swipe duration (ms, 100\u20135000)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"percent"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:[(0,n.jsx)(d.code,{children:"0.5"})," / ",(0,n.jsx)(d.code,{children:"0.95"})]}),(0,n.jsx)(d.td,{children:"Fraction of screen to swipe (0\u20131)"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"drag_and_drop",children:(0,n.jsx)(d.code,{children:"drag_and_drop"})}),"\n",(0,n.jsxs)(d.p,{children:["Drags an element to another element or coordinates. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"sourceSelector"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Source element to drag"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"targetSelector"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Target element to drop onto"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"x"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Target X offset (if no targetSelector)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"y"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Target Y offset (if no targetSelector)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"duration"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Drag duration (ms, 100\u20135000)"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"context-switching-mobile",children:"Context Switching (Mobile)"}),"\n",(0,n.jsx)(d.h3,{id:"get_contexts",children:(0,n.jsx)(d.code,{children:"get_contexts"})}),"\n",(0,n.jsxs)(d.p,{children:["Returns available automation contexts and the currently active one. Use before ",(0,n.jsx)(d.code,{children:"switch_context"})," to discover ",(0,n.jsx)(d.code,{children:"NATIVE_APP"})," and ",(0,n.jsx)(d.code,{children:"WEBVIEW_*"})," targets. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsx)(d.p,{children:"No parameters."}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"switch_context",children:(0,n.jsx)(d.code,{children:"switch_context"})}),"\n",(0,n.jsxs)(d.p,{children:["Switches between native and webview automation contexts in a hybrid mobile app. Required before using CSS/XPath selectors inside an embedded webview. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"context"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsxs)(d.td,{children:["Context name, e.g. ",(0,n.jsx)(d.code,{children:'"NATIVE_APP"'}),", ",(0,n.jsx)(d.code,{children:'"WEBVIEW_com.example.app"'})]})]})})]}),"\n",(0,n.jsxs)(d.p,{children:["Get available context names from ",(0,n.jsx)(d.code,{children:"get_contexts"})," or ",(0,n.jsx)(d.code,{children:"wdio://session/current/contexts"}),"."]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{children:'// 1. Check what\'s available\nget_contexts()\n// \u2192 { contexts: ["NATIVE_APP", "WEBVIEW_com.example.app"], currentContext: "NATIVE_APP" }\n\n// 2. Switch into the webview for CSS/XPath\nswitch_context({ context: "WEBVIEW_com.example.app" })\n\n// 3. Interact with webview elements using CSS selectors\nclick_element({ selector: "#login-button" })\n\n// 4. Switch back to native for native UI\nswitch_context({ context: "NATIVE_APP" })\n'})}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"device-control-mobile",children:"Device Control (Mobile)"}),"\n",(0,n.jsx)(d.h3,{id:"rotate_device",children:(0,n.jsx)(d.code,{children:"rotate_device"})}),"\n",(0,n.jsxs)(d.p,{children:["Rotates the device to portrait or landscape and waits for the OS rotation to complete. Use to test orientation-dependent layouts. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"orientation"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"PORTRAIT" | "LANDSCAPE"'})}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"Target orientation"})]})})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"hide_keyboard",children:(0,n.jsx)(d.code,{children:"hide_keyboard"})}
1),"\n",(0,n.jsxs)(d.p,{children:["Dismisses the software keyboard. Call after text entry when the keyboard obscures elements you need next. No-op if already hidden. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsx)(d.p,{children:"No parameters."}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"set_geolocation",children:(0,n.jsx)(d.code,{children:"set_geolocation"})}),"\n",(0,n.jsxs)(d.p,{children:["Overrides device GPS coordinates for the session. Affects ",(0,n.jsx)(d.code,{children:"navigator.geolocation"})," on web and location services on mobile. Location permissions must be granted to the app beforehand."]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"latitude"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"Latitude (\u221290 to 90)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"longitude"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"Longitude (\u2212180 to 180)"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"altitude"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Altitude in metres"})]})]})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"app-lifecycle-mobile",children:"App Lifecycle (Mobile)"}),"\n",(0,n.jsx)(d.h3,{id:"get_app_state",children:(0,n.jsx)(d.code,{children:"get_app_state"})}),"\n",(0,n.jsxs)(d.p,{children:["Returns the current lifecycle state of a mobile app. ",(0,n.jsx)(d.strong,{children:"Mobile-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"bundleId"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsxs)(d.td,{children:["iOS bundle ID or Android package name, e.g. ",(0,n.jsx)(d.code,{children:'"com.example.app"'})]})]})})]}),"\n",(0,n.jsxs)(d.p,{children:["Returns one of: ",(0,n.jsx)(d.code,{children:"not installed"}),", ",(0,n.jsx)(d.code,{children:"not running"}),", ",(0,n.jsx)(d.code,{children:"background (suspended)"}),", ",(0,n.jsx)(d.code,{children:"background"}),", ",(0,n.jsx)(d.code,{children:"foreground"}),"."]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"browser-utilities",children:"Browser Utilities"}),"\n",(0,n.jsx)(d.h3,{id:"emulate_device",children:(0,n.jsx)(d.code,{children:"emulate_device"})}),"\n",(0,n.jsxs)(d.p,{children:["Emulates a mobile or tablet device in the current browser session (sets viewport, DPR, user-agent, touch events). Requires a BiDi-enabled session: ",(0,n.jsx)(d.code,{children:"start_session({ capabilities: { webSocketUrl: true } })"}),". ",(0,n.jsx)(d.strong,{children:"Browser-only."})]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsx)(d.tbody,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"device"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Device preset name (e.g. ",(0,n.jsx)(d.code,{children:'"iPhone 15"'}),", ",(0,n.jsx)(d.code,{children:'"Pixel 7"'}),"). Omit to list presets. Pass ",(0,n.jsx)(d.code,{children:'"reset"'})," to restore desktop defaults."]})]})})]}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"execute_script",children:(0,n.jsx)(d.code,{children:"execute_script"})}),"\n",(0,n.jsx)(d.p,{children:"Executes JavaScript in the browser or mobile commands via Appium."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"script"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsxs)(d.td,{children:["JS code (browser) or Appium command like ",(0,n.jsx)(d.code,{children:'"mobile: pressKey"'})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"args"})}),(0,n.jsx)(d.td,{children:"any[]"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Arguments passed to the script or command"})]})]})]}),"\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.strong,{children:"Browser:"})," use ",(0,n.jsx)(d.code,{children:"return"})," to get values back."]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-javascript",children:'// Get page title\nexecute_script({ script: "return document.title" })\n\n// Scroll element into view\nexecute_script({ script: "arguments[0].scrollIntoView()", args: ["#my-element"] })\n'})}),"\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.strong,{children:"Mobile (Appium):"})," uses ",(0,n.jsx)(d.code,{children:"mobile: <command>"})," syntax."]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-javascript",children:'// Press Android back key\nexecute_script({ script: "mobile: pressKey", args: [{ keycode: 4 }] })\n\n// Activate app (iOS/Android)\nexecute_script({ script: "mobile: activateApp", args: [{ bundleId: "com.example.app" }] })\n\n// Deep link (iOS)\nexecute_script({ script: "mobile: deepLink", args: [{ url: "myapp://route", bundleId: "com.example.app" }] })\n'})}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h2,{id:"cloud-providers",children:"Cloud Providers"}),"\n",(0,n.jsx)(d.h3,{id:"list_apps",children:(0,n.jsx)(d.code,{children:"list_apps"})}),"\n",(0,n.jsx)(d.p,{children:"Lists apps uploaded to a cloud provider (BrowserStack App Automate, Sauce Labs App Storage, TestMu, or TestingBot Storage). Reads provider-specific credentials from environment."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"provider"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"browserstack" | "saucelabs" | "testmu" | "testingbot"'})}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Cloud provider"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"sortBy"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"app_name" | "uploaded_at"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"uploaded_at"'})}),(0,n.jsx)(d.td,{children:"Sort order"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"organizationWide"})}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})}),(0,n.jsx)(d.td,{children:"(BrowserStack only) List all org uploads"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"limit"})}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"20"})}),(0,n.jsx)(d.td,{children:"Max results"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"region"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"us-west-1" | "eu-central-1" | "apac-southeast-1"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"eu-central-1"'})}),(0,n.jsx)(d.td,{children:"Sauce Labs region"})]})]})]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{children:'// List all four providers\nlist_apps({ provider: "browserstack" })\nlist_apps({ provider: "saucelabs", region: "us-west-1" })\nlist_apps({ provider: "testmu" })\nlist_apps({ provider: "testingbot" })\n'})}),"\n",(0,n.jsx)(d.hr,{}),"\n",(0,n.jsx)(d.h3,{id:"upload_app",children:(0,n.jsx)(d.code,{children:"upload_app"})}),"\n",(0,n.jsxs)(d.p,{children:["Uploads a local ",(0,n.jsx)(d.code,{children:".apk"})," or ",(0,n.jsx)(d.code,{children:".ipa"})," to a cloud provider (BrowserStack, Sauce Labs, TestMu, or TestingBot). Returns the app URL for use in ",(0,n.jsx)(d.code,{children:"start_session"}),"."]}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Parameter"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required"}),(0,n.jsx)(d.th,{children:"Default"}),(0,n.jsx)(d.th,{children:"Description"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"provider"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"browserstack" | "saucelabs" | "testmu" | "testingbot"'})}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Cloud provider"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"path"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2713"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsxs)(d.td,{children:["Absolute path to the ",(0,n.jsx)(d.code,{children:".apk"})," or ",(0,n.jsx)(d.code,{children:".ipa"})," file"]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"customId"})}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:"Optional custom ID for referencing the app later"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"region"})}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"us-west-1" | "eu-central-1" | "apac-southeast-1"'})}),(0,n.jsx)(d.td,{children:"\u2014"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:'"eu-central-1"'})}),(0,n.jsx)(d.td,{children:"Sauce Labs region"})]})]})]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{children:'// Upload to each provider\nupload_app({ provider: "browserstack", path: "/path/to/app.apk" })\nupload_app({ provider: "saucelabs", path: "/path/to/app.ipa", region: "us-west-1" })\nupload_app({ provider: "testmu", path: "/path/to/app.apk" })\nupload_app({ provider: "testingbot", path: "/path/to/app.apk" })\n'})})]})}function x(e={}){const{wrapper:d}={...(0,i.R)(),...e.components};return d?(0,n.jsx)(d,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.