browsingContext.locateNodes-Befehl
Der browsingContext.locateNodes Befehl des browsingContext Moduls findet die Knoten in einem Kontext, die einem Locator entsprechen, welcher die Suchkriterien angibt.
Syntax
/* With required parameters */
{
"method": "browsingContext.locateNodes",
"params": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"locator": {
"type": "css",
"value": ".product"
}
}
}
/* With required and optional parameters */
{
"method": "browsingContext.locateNodes",
"params": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"locator": {
"type": "xpath",
"value": "//a[text()='Learn more']"
},
"maxNodeCount": 3,
"serializationOptions": {
"maxDomDepth": 2,
"includeShadowTree": "all"
},
"startNodes": [
{
"sharedId": "f8f6a1f2-3d8a-4b8e-9f1a-6f6a2f6a2f6a"
}
]
}
}
Parameter
Das Feld params enthält:
context-
Eine Zeichenfolge, die die ID des zu durchsuchenden Kontexts enthält. Kontext-IDs werden von Befehlen wie
browsingContext.getTreezurückgegeben. locator-
Ein Objekt, das eines von fünf Kriterien angibt, um Knoten zu finden, indem eine Kombination aus
type- undvalue-Feldern verwendet wird. Die Form desvalue-Felds hängt vomtype-Feld ab. Einigetype-Werte erlauben zusätzliche Felder imlocator-Objekt.type-
Eine Zeichenfolge, die die Strategie zum Finden von Knoten angibt. Sie kann einen der folgenden Werte annehmen:
"accessibility": Findet Knoten mit übereinstimmendem zugänglichemrole,nameoder beidem."context": Findet das Containerelement (wie<iframe>oder<embed>) eines Kindkontexts."css": Findet Knoten, die einem CSS-Selektor entsprechen."innerText": Findet Knoten, deren gerenderter Text (innerText) die angegebene Zeichenfolge genau enthält oder mit dieser entspricht."xpath": Findet Knoten, die einem XPath-Ausdruck entsprechen.
value-
Je nach
typeeine Zeichenfolge oder ein Objekt, das angibt, wonach gesucht werden soll:- Bei
type: "accessibility"istvalueein Objekt, das mindestens eines der folgenden Felder enthalten muss:nameOptional-
Eine Zeichenfolge, die den zugänglichen Namen enthält, der übereinstimmen soll, wie
"Submit"für eine Schaltfläche mitaria-label="Submit". roleOptional-
Eine Zeichenfolge, die die zugängliche Rolle enthält, die übereinstimmen soll, wie
"checkbox"für ein Element mitrole="checkbox".
- Bei
type: "context"istvalueein Objekt mit folgendem Feld:context-
Eine Zeichenfolge, die die ID eines Kindkontexts enthält. Es muss ein direkter Nachfolger des im
context-Parameter des Befehls angegebenen Kontextes sein.
- Bei
type: "css"istvalueeine Zeichenfolge, die den zu bewertenden CSS-Selektor enthält, wie"li:nth-child(2)". - Bei
type: "innerText"istvalueeine Zeichenfolge, die den zu findenden Text enthält. - Bei
type: "xpath"istvalueeine Zeichenfolge, die den zu bewertenden XPath-Ausdruck enthält, wie"//img[@alt='logo']".
- Bei
ignoreCaseOptional-
Ein boolescher Wert, der angibt, ob der Textvergleich die Groß-/Kleinschreibung ignoriert. Dieses Feld ist nur für
type: "innerText"verfügbar.false: Der Vergleich unterscheidet Groß- und Kleinschreibung. Dies ist der Standardwert.true: Der Vergleich ignoriert die Groß-/Kleinschreibung.
matchTypeOptional-
Eine Zeichenfolge, die angibt, ob der Suchtext genau mit dem gesamten Text des Knotens übereinstimmen muss oder nur mit einem Teil davon. Dieses Feld ist nur für
type: "innerText"verfügbar. Es kann einen der folgenden Werte annehmen:"full": Der Suchtext muss genau mit dem gesamten Text des Knotens übereinstimmen. Dies ist der Standardwert."partial": Der Suchtext muss nur mit einem Teil des Textes des Knotens übereinstimmen.
maxDepthOptional-
Eine nicht-negative Ganzzahl, die die maximale Anzahl von Ebenen von Nachkommen angibt, die durchsucht werden sollen. Auf der tiefstzulässigen Ebene wird ein Knoten an seinem eigenen gerenderten Text abgeglichen, anstatt weiter durchsucht zu werden. Dieses Feld ist nur für
type: "innerText"verfügbar. Wenn nicht angegeben, gibt es keine Begrenzung für die Anzahl der durchsuchen Ebenen.
maxNodeCountOptional-
Eine positive Ganzzahl, die die maximale Anzahl zurückgegebener Knoten angibt. Wenn nicht angegeben, werden alle übereinstimmenden Knoten zurückgegeben.
serializationOptionsOptional-
Ein Objekt, das die Menge der Detailinformationen steuert, die in der Antwort für jeden übereinstimmenden Knoten enthalten sind. Es kann die folgenden Felder enthalten:
includeShadowTreeOptional-
Eine Zeichenfolge, die angibt, ob Shadow-Roots in der Antwort enthalten sind (siehe das
shadowRoot-Feld, das im Abschnitt Rückgabewert beschrieben wird). Es kann einen der folgenden Werte annehmen:"none": Shadow-Roots sind nicht enthalten. Dies ist der Standardwert."all": Sowohl offene Shadow-Roots (zugänglich von JavaScript außerhalb der Root) als auch geschlossene Shadow-Roots (nicht zugänglich von JavaScript außerhalb der Root) sind enthalten."open": Nur offene Shadow-Roots sind enthalten.
maxDomDepthOptional-
Eine nicht-negative Ganzzahl oder
nullfür unbegrenzt, die die Anzahl der Ebenen von Nachkommenknoten angibt, die in der Antwort für jeden übereinstimmenden Knoten enthalten sind (siehe daschildren-Feld, das im Abschnitt Rückgabewert beschrieben wird). Der Standardwert ist0, was Nachkommen ausschließt. maxObjectDepthOptional-
Eine nicht-negative Ganzzahl oder
nullfür unbegrenzt, die die Anzahl der Ebenen von verschachtelten Objekten angibt, die beim Serialisieren der JavaScript-Eigenschaften eines Knotens enthalten sind. Der Standardwert istnull.
startNodesOptional-
Ein Array von einem oder mehreren Knotenreferenzen, das die Knoten angibt, innerhalb derer gesucht werden soll, anstatt das gesamte Dokument zu durchsuchen. Jede Referenz ist ein Objekt mit den folgenden Feldern:
handleOptional-
Eine Zeichenfolge, die einen Handle zu einem JavaScript-Objekt enthält, wie z.B. einen, der aus einer früheren
script.evaluateoderscript.callFunctionAntwort beibehalten wurde. -
Eine Zeichenfolge, die die ID eines zuvor zurückgegebenen Knotens enthält, wie einen aus einer früheren
browsingContext.locateNodesAntwort.
Hinweis:
startNodeskann nicht verwendet werden, wennlocator.type"context"ist.
Rückgabewert
Das result-Objekt in der Antwort enthält die folgenden Felder:
nodes-
Ein Array von Knotenobjekten, eines für jeden übereinstimmenden Knoten. Jedes Objekt kann die folgenden Felder haben:
internalIdOptional-
Eine Zeichenfolge, die dieses Knotenobjekt in der Antwort eindeutig identifiziert. Dieses Feld ist nur vorhanden, wenn dasselbe Knotenobjekt mehr als einmal in derselben Antwort erscheint, z.B. wenn ein Knoten sowohl als oberste Übereinstimmung als auch als Nachkomme eines anderen übereinstimmenden Knotens erscheint.
-
Eine Zeichenfolge, die eine ID zum Referenzieren dieses Knotens in späteren Befehlen enthält, wie in
startNodeseines nachfolgendenbrowsingContext.locateNodesAufrufs. Diese ID ist über die gesamte Sitzung hinweg eindeutig und bleibt für die Lebensdauer der Sitzung gültig, solange der Knoten noch existiert. type-
Eine Zeichenfolge, die immer den Wert
"node"hat. valueOptional-
Ein Objekt, das Eigenschaften des übereinstimmenden Knotens beschreibt. Dieses Objekt kann die folgenden Felder enthalten:
attributesOptional-
Ein Objekt, das jedes Attribut auf seinen Zeichenfolgenwert abbildet. Dieses Feld ist nur für Elementknoten vorhanden.
childNodeCount-
Eine nicht-negative Ganzzahl, die die Anzahl der direkten Kindknoten des zurückgegebenen Knotens angibt. Dies ist die tatsächliche Anzahl, auch wenn das
children-Feld fehlt oder weniger davon enthält. childrenOptional-
Ein Array von Nachkommenknoten, von denen jeder dieselben Felder wie dieses Objekt enthält. Nachkommen sind bis zu der Ebene enthalten, die durch
maxDomDepthinserializationOptionsfestgelegt ist. localNameOptional-
Eine Zeichenfolge, die den lokalen Namen des Knotens enthält. Bei einem HTML-Element ist dies der Tag-Name in Kleinbuchstaben. Dieses Feld ist nur für Elementknoten vorhanden.
modeOptional-
Eine Zeichenfolge, die den Modus der Shadow-Root angibt, die dem Knoten zugeordnet ist. Dieses Feld ist nur für Shadow-Root-Knoten vorhanden. Es kann einen der folgenden Werte annehmen:
"closed": Gibt an, dass Knoten innerhalb der Shadow-Root von JavaScript außerhalb der Root nicht zugänglich sind."open": Gibt an, dass Knoten innerhalb der Shadow-Root von JavaScript außerhalb der Root zugänglich sind.
namespaceURIOptional-
Eine Zeichenfolge, die die Namespace-URI des Knotens enthält. Dieses Feld ist nur für Elementknoten vorhanden. Bei HTML-Elementen ist der Wert immer der Standard-HTML-Namespace,
"http://www.w3.org/1999/xhtml". nodeType-
Eine Ganzzahl, die den Typ des Knotens darstellt, wie
1für ein Element oder3für einen Textknoten. nodeValueOptional-
Eine Zeichenfolge, die den Wert des Knotens enthält, wie den Text eines Textknotens oder die Daten eines Kommentarknotens. Dieses Feld ist für Element- und Dokumentknoten nicht vorhanden.
shadowRootOptional-
Ein Objekt, das die Shadow-Root beschreibt, die dem Knoten zugeordnet ist. Das Objekt hat dieselben Felder wie jedes Knotenobjekt in
nodes, einschließlichsharedId,typeundvalue.Der Wert dieses Feldes ist
null, wenn der zurückgegebene Knoten keine Shadow-Root hat oder wenn die Shadow-Root unter Verwendung derincludeShadowTree-Einstellung ausgeschlossen ist.
Fehler
invalid argument-
Wird in einem der folgenden Fälle ausgelöst:
- Ein erforderlicher Parameter fehlt oder hat einen ungültigen Typ.
startNodeswird angegeben, wennlocator.type"context"ist.- Der durch
locator.value.contextidentifizierte Kindkontext ist kein direkter Nachfolger des imcontext-Parameter angegebenen Kontexts.
invalid selector-
Wird in einem der folgenden Fälle ausgelöst:
- Der CSS-Selektor oder XPath-Ausdruck in
locator.valuekann nicht analysiert werden. locator.typeist"innerText"undvalueist eine leere Zeichenfolge.locator.typeist"accessibility"und wederrolenochnameist angegeben.
- Der CSS-Selektor oder XPath-Ausdruck in
no such frame-
Kein Kontext mit der angegebenen
context-ID gefunden. no such handle-
Ein in
startNodesreferenzierter Knoten kann nicht aufgelöst werden, zum Beispiel, wenn er vom Garbage-Collector entfernt wurde. unknown error-
Die Auswertung des XPath-Ausdrucks in
locator.valueist aus einem anderen Grund als einem Analysefehler fehlgeschlagen.
Beschreibung
Der browsingContext.locateNodes-Befehl ist der primäre Weg, um Knoten im DOM eines Dokuments zu finden - er ähnelt den Find Element(s)-Befehlen in WebDriver Classic.
Er verwandelt einen Locator, wie einen CSS-Selektor oder XPath-Ausdruck, in Knotenreferenzen (mit sharedId und optional handle).
Sie können diese Referenzen in späteren Befehlen verwenden, wie in startNodes bei einem nachfolgenden browsingContext.locateNodes-Aufruf oder als Ziel für script.callFunction.
Als Alternative zu diesem Befehl können Sie script.evaluate verwenden, obwohl dies das Schreiben des entsprechenden JavaScript-Codes erfordert.
Beim Lokalisieren von Knoten können Sie drei Grenzen festlegen, um die Menge der in der Antwort zurückgegebenen Daten zu steuern:
maxNodeCountist ein oberster Parameter, der die Anzahl der insgesamt zurückgegebenen übereinstimmenden Knoten steuert. Dies steuert die Breite des Suchergebnisses.- Die beiden anderen Parameter,
maxDomDepthundmaxObjectDepth, beide imserializationOptions-Objekt, steuern die Tiefe der in der Antwort für jeden übereinstimmenden Knoten zurückgegebenen Daten.maxDomDepthsteuert die Anzahl der Ebenen von DOM-Nachkommen, die in jedem übereinstimmenden Knoten imchildren-Feld enthalten sind.maxObjectDepthsteuert die Anzahl der Ebenen von verschachtelten JavaScript-Objekteigenschaften, die enthalten sind, wenn Nicht-Knoten-Werte in der Antwort dargestellt werden.
Beispiele
>Lokalisieren von Knoten mit einem CSS-Selektor
Angenommen, Sie haben eine WebDriver BiDi-Verbindung und eine aktive Sitzung.
Angenommen, Ihr Dokument hat eine einzige <button> mit einer submit-Klasse.
Verwenden Sie die Kontext-ID dieses Dokuments, die Sie mit browsingContext.getTree erhalten haben, um die folgende Nachricht zu senden, um die Schaltfläche nach ihrer Klasse zu finden:
{
"id": 1,
"method": "browsingContext.locateNodes",
"params": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"locator": {
"type": "css",
"value": "button.submit"
}
}
}
Der Browser antwortet mit dem übereinstimmenden Knoten wie folgt:
{
"id": 1,
"type": "success",
"result": {
"nodes": [
{
"type": "node",
"sharedId": "f8f6a1f2-3d8a-4b8e-9f1a-6f6a2f6a2f6a",
"value": {
"nodeType": 1,
"localName": "button",
"namespaceURI": "http://www.w3.org/1999/xhtml",
"childNodeCount": 1,
"attributes": {
"class": "submit"
},
"shadowRoot": null
}
}
]
}
}
Beachten Sie, dass in dieser Antwort das nodes-Array ein einzelnes Objekt enthält, das einem übereinstimmenden Knoten entspricht.
Sein localName ist "button", was dem Tag des Elements entspricht.
Die Schaltfläche hat einen Kindknoten, ihren Text "Submit", weshalb childNodeCount 1 ist.
shadowRoot ist null, da die Schaltfläche keine Shadow-Root hat.
Begrenzung der zurückgegebenen Anzahl übereinstimmender Knoten
Angenommen, Ihr Dokument hat drei <li>-Elemente mit einer item-Klasse.
Verwenden Sie die gleiche Verbindung und Sitzung wie im ersten Beispiel, um die folgende Nachricht zu senden, mit der Sie zwei davon mit einem CSS-Selektor und maxNodeCount finden:
{
"id": 2,
"method": "browsingContext.locateNodes",
"params": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"locator": {
"type": "css",
"value": "li.item"
},
"maxNodeCount": 2
}
}
Der Browser antwortet mit zwei übereinstimmenden Knoten wie folgt:
{
"id": 2,
"type": "success",
"result": {
"nodes": [
{
"type": "node",
"sharedId": "a1b2c3d4-1111-4b8e-9f1a-6f6a2f6a2f6a",
"value": {
"nodeType": 1,
"localName": "li",
"namespaceURI": "http://www.w3.org/1999/xhtml",
"childNodeCount": 1,
"attributes": {
"class": "item"
},
"shadowRoot": null
}
},
{
"type": "node",
"sharedId": "a1b2c3d4-2222-4b8e-9f1a-6f6a2f6a2f6a",
"value": {
"nodeType": 1,
"localName": "li",
"namespaceURI": "http://www.w3.org/1999/xhtml",
"childNodeCount": 1,
"attributes": {
"class": "item"
},
"shadowRoot": null
}
}
]
}
}
Lokalisieren eines Knotens über zugängliche Rolle und Name
Angenommen, Ihr Dokument hat das folgende Markup, das dem Element eine zugängliche Rolle von "checkbox" und den zugänglichen Namen als "Checkbox name" gibt:
<span
role="checkbox"
aria-checked="false"
tabindex="0"
aria-labelledby="checkbox-label"></span>
<span id="checkbox-label">Checkbox name</span>
Verwenden Sie die gleiche Verbindung und Sitzung wie im ersten Beispiel, um die folgende Nachricht zu senden, um die Checkbox mit ihren Zugänglichkeitsmerkmalen zu finden:
{
"id": 3,
"method": "browsingContext.locateNodes",
"params": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"locator": {
"type": "accessibility",
"value": {
"role": "checkbox",
"name": "Checkbox name"
}
}
}
}
Der Browser antwortet mit dem übereinstimmenden Knoten wie folgt:
{
"id": 3,
"type": "success",
"result": {
"nodes": [
{
"type": "node",
"sharedId": "f8f6a1f2-4444-4b8e-9f1a-6f6a2f6a2f6a",
"value": {
"nodeType": 1,
"localName": "span",
"namespaceURI": "http://www.w3.org/1999/xhtml",
"childNodeCount": 0,
"attributes": {
"role": "checkbox",
"aria-checked": "false",
"tabindex": "0",
"aria-labelledby": "checkbox-label"
},
"shadowRoot": null
}
}
]
}
}
Sie können diese Checkbox auch nur mit ihrer zugänglichen Rolle oder nur mit ihrem zugänglichen Namen finden, da dieser Locator mit einem von beiden allein funktioniert.
Lokalisieren des Containerelements eines Kindkontexts
Angenommen, Ihr Dokument hat ein <iframe>, das einen Kindkontext enthält.
Verwenden Sie die gleiche Verbindung und Sitzung wie im ersten Beispiel, um die ID des Kindkontexts zu erhalten, indem Sie browsingContext.getTree verwenden.
Senden Sie die folgende Nachricht, um das iframe mit einem Kontext-Locator zu finden:
{
"id": 4,
"method": "browsingContext.locateNodes",
"params": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"locator": {
"type": "context",
"value": {
"context": "6442450945"
}
}
}
}
Der Browser antwortet mit dem übereinstimmenden Knoten wie folgt:
{
"id": 4,
"type": "success",
"result": {
"nodes": [
{
"type": "node",
"sharedId": "f8f6a1f2-5555-4b8e-9f1a-6f6a2f6a2f6a",
"value": {
"nodeType": 1,
"localName": "iframe",
"namespaceURI": "http://www.w3.org/1999/xhtml",
"childNodeCount": 0,
"attributes": {
"src": "https://example.com/frame.html"
},
"shadowRoot": null
}
}
]
}
}
Spezifikationen
| Spezifikation |
|---|
| WebDriver BiDi> # command-browsingContext-locateNodes> |
Browser-Kompatibilität
Siehe auch
browsingContext.getTreeBefehlbrowsingContext.navigateBefehlbrowsingContext.reloadBefehlscript.callFunctionBefehl