@browserstack/mcp-server 2.3.0-beta.7 → 2.3.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/capability/devicecontrol.capability-index.json +25 -16
- package/capability/loadtesting.capability-index.json +2934 -2933
- package/capability/mobiledevicecontrol.capability-index.json +60 -61
- package/capability/tm.capability-index.json +49977 -49971
- package/capability/tra.capability-index.json +31584 -31583
- package/dist/tools/applive.js +1 -1
- package/dist/tools/capability-registry/register.js +9 -2
- package/dist/tools/capability-registry/types.d.ts +8 -0
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"version": "1.0",
|
|
4
4
|
"build_id": "8445466_2026-10-19T06:53:46Z",
|
|
5
5
|
"devicecontrol": {
|
|
6
|
+
"title": "Device Control (Automate)",
|
|
6
7
|
"summary": "Device control: drive a real desktop or mobile browser page by page. The account side lists every operating system, browser and version combination available, reports parallel-session capacity, and keeps each session's record \u2014 status, shareable link, video, and console, network and profiling logs \u2014 after the browser is released. The session side opens a browser on a chosen combination and drives it: navigate, go back and forward, reload, find elements by CSS or XPath, click, type, clear, screenshot the viewport, resize the window, and move between tabs and iframes. Web pages are RUN here \u2014 unlike Test Management, which authors cases, and Test Reporting, which records results pushed in from a runner. Mobile APPS are not here: those are mobile device control, which drives an installed app rather than a browser. Scrolling is done with scroll_to_element or scroll_page, there is no capability that waits, and element ids go stale as soon as the page navigates or re-renders. A session holds a browser until it is ended.",
|
|
7
8
|
"routing_terms": [
|
|
8
9
|
"automate",
|
|
@@ -25,7 +26,6 @@
|
|
|
25
26
|
"scroll",
|
|
26
27
|
"iframe",
|
|
27
28
|
"tab",
|
|
28
|
-
"cookie",
|
|
29
29
|
"screenshot",
|
|
30
30
|
"console logs",
|
|
31
31
|
"network logs",
|
|
@@ -253,18 +253,25 @@
|
|
|
253
253
|
"mode": "write",
|
|
254
254
|
"entity": "browser_session",
|
|
255
255
|
"intent": "Start a browser session on a real desktop or mobile browser and get a session id to drive it with \u2014 use this to open a page and interact with it step by step.",
|
|
256
|
-
"guidance":
|
|
257
|
-
"
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
256
|
+
"guidance": {
|
|
257
|
+
"shared": [
|
|
258
|
+
"A DESKTOP target needs browser_name with os and os_version; a MOBILE BROWSER needs browser_name with device_name and real_mobile instead, and takes no browser_version because the browser ships with the OS. Sending both kinds together is refused.",
|
|
259
|
+
"ON MOBILE THE BROWSER IS NAMED AFTER THE PLATFORM, not the product: Chrome on an Android phone is \"android\", Safari on an iPhone is \"iphone\" and on an iPad \"ipad\". Samsung Internet is \"samsung\" and Chromium-based mobile browsers are \"chromium\". Asking for \"chrome\" or \"safari\" on a phone is refused.",
|
|
260
|
+
"Take every value from list_browsers exactly as it spells them; an unlisted combination is refused rather than substituted.",
|
|
261
|
+
"The session id comes back at value.sessionId \u2014 carry it into every other browser_session capability.",
|
|
262
|
+
"A session starts in seconds rather than the tens of seconds a device session takes, but it still holds a browser and consumes Automate minutes until it ends: always finish with set_session_status and then delete_session.",
|
|
263
|
+
"The session ends itself after idle_timeout seconds without a command, and after 2 hours in total.",
|
|
264
|
+
"console_logs and network_logs must be asked for here; they cannot be turned on once the session is running, and get_session only links to them when they were.",
|
|
265
|
+
"Credentials belong in the Authorization header, never inside bstack:options: capabilities are echoed back in session-not-created errors.",
|
|
266
|
+
"resolution takes one of a fixed set of values per operating system, not any width and height: an unsupported pair is refused outright rather than rounded to the nearest one. The browser window is well short of the screen it sits on \u2014 1920x1080 gives a viewport around 930x860 \u2014 so measure it rather than assuming the request was honoured."
|
|
267
|
+
],
|
|
268
|
+
"local": [
|
|
269
|
+
"ON THE USER'S OWN MACHINE YOU CAN OPEN THE LIVE VIEW FOR THEM. This call returns only value.sessionId; call get_session straight after it, then run the shell command open \"<browser_url>\" on macOS or xdg-open \"<browser_url>\" on Linux, and say you opened the session on the Automate dashboard \u2014 it needs a BrowserStack login in that browser."
|
|
270
|
+
],
|
|
271
|
+
"remote": [
|
|
272
|
+
"THIS CALL RETURNS NO LINK \u2014 only value.sessionId. Nothing here can open a browser for the user either: this surface makes HTTP requests, and on a remote server there is no browser to open. So never say a live view was opened. If the user may want to watch, call get_session straight after this and give them browser_url in the same reply, which is the session on the dashboard and needs a BrowserStack login. public_url needs no login but carries an auth token, so offer it only when they ask to share outside the team."
|
|
273
|
+
]
|
|
274
|
+
},
|
|
268
275
|
"body": [
|
|
269
276
|
{
|
|
270
277
|
"name": "browser_name",
|
|
@@ -836,7 +843,7 @@
|
|
|
836
843
|
"intent": "Type into a field \u2014 use this to fill a search box, a login form or any editable input.",
|
|
837
844
|
"guidance": [
|
|
838
845
|
"APPENDS to whatever the field already holds. Call clear_element first to replace the value rather than adding to it.",
|
|
839
|
-
"Read the result back with get_element_property on \"value\": a field's current contents are a property, not text.",
|
|
846
|
+
"Read the result back with get_element_property on \"value\": a field's current contents are a property, not text. On Safari for iOS, where property reads answer 405, use get_element_attribute with name value instead.",
|
|
840
847
|
"A \\n at the end submits the form on a desktop browser and on Chrome for Android, and is quicker than finding the submit button. IT DOES NOT SUBMIT ON SAFARI FOR iOS \u2014 the text lands in the field and the page stays where it is, whether the newline is sent with the text or on its own. There, click the form's submit button with click_element \u2014 scroll_to_element first if it sits below the fold.",
|
|
841
848
|
"The element must be editable; typing into anything else answers \"element not interactable\".",
|
|
842
849
|
"A site's own autocomplete or dropdown may swallow the keystrokes and require a click on a suggestion instead."
|
|
@@ -888,8 +895,9 @@
|
|
|
888
895
|
"entity": "browser_session",
|
|
889
896
|
"intent": "Empty an input \u2014 use this before typing, since send_keys adds to what is already there.",
|
|
890
897
|
"guidance": [
|
|
898
|
+
"WORKS ON EVERY BROWSER: desktop Chrome, Chrome for Android and Safari on iPhone all answer 200 and leave the field empty; typing afterwards starts from nothing.",
|
|
891
899
|
"Takes no parameters of its own.",
|
|
892
|
-
"Confirm with get_element_property on \"value\", which reads empty afterwards.",
|
|
900
|
+
"Confirm with get_element_property on \"value\", which reads empty afterwards \u2014 on Safari for iOS, where property reads answer 405, use get_element_attribute with name value instead. Measured empty after clearing on desktop Chrome, Chrome for Android and Safari on iPhone.",
|
|
893
901
|
"Clearing also fires the page's own change handlers, so a form may revalidate and show an error about the now-empty field.",
|
|
894
902
|
"The element must be editable; anything else answers \"invalid element state\"."
|
|
895
903
|
],
|
|
@@ -974,6 +982,7 @@
|
|
|
974
982
|
"entity": "browser_session",
|
|
975
983
|
"intent": "Read a live DOM property of an element \u2014 use this for what a field currently holds, or whether a box is checked right now.",
|
|
976
984
|
"guidance": [
|
|
985
|
+
"NOT ON SAFARI FOR iOS: the driver there answers 405 \"unknown method\" to every property read. On an iPhone or iPad read get_element_attribute with name value instead, which returns what the field holds right now; on desktop browsers and Chrome for Android this is the live view and the attribute is the markup.",
|
|
977
986
|
"THIS IS THE ONE THAT READS A FIELD'S CURRENT VALUE. The \"value\" attribute is the markup's initial value rather than what is in the box now, and an input carries no text.",
|
|
978
987
|
"Useful names: value, checked, selected, disabled, innerText, href.",
|
|
979
988
|
"A property the element does not have comes back null, not an error."
|
|
@@ -1023,7 +1032,7 @@
|
|
|
1023
1032
|
"entity": "browser_session",
|
|
1024
1033
|
"intent": "Read an HTML attribute of an element \u2014 use this for ids, classes, data- attributes and link targets as the markup declares them.",
|
|
1025
1034
|
"guidance": [
|
|
1026
|
-
"
|
|
1035
|
+
"On desktop browsers and Chrome for Android this is the attribute as written in the HTML, which is NOT what a field currently holds: for that, use get_element_property on \"value\". On Safari for iOS it is the other way round \u2014 get_element_property answers 405 there, and this call with name value returns what the field holds right now.",
|
|
1027
1036
|
"An attribute the element does not carry comes back null rather than an error, so null means absent, not empty.",
|
|
1028
1037
|
"An attribute a script has changed may still read as the original markup; the property is the live view."
|
|
1029
1038
|
],
|