Offizielle Ortungsstrategien für den Webdriver

Lesezeit: 3 Minuten

In dem offizielle W3c-Webdiver-Dokumentationwird klar gesagt, dass die Standortstrategien sind:

State   Keyword
CSS selector    "css selector"
Link text selector  "link text"
Partial link text selector  "partial link text"
Tag name    "tag name"
XPath selector  "xpath"

Aber, Drahtprotokoll von Selenium erlaubt:

class name  
css selector
id  
name
link text
partial link text
tag name
xpath

In THEORY sind die Dokumente von Selenium veraltet und die “wahre” Geschichte befindet sich im neuen Spezifikationsdokument. Aber…

Ich habe einige Tests mit dem neuesten Chrome-eigenen Webdriver durchgeführt und kann das bestätigen name und class name beide arbeiten; Sie sind jedoch nicht in den Spezifikationen enthalten.

Ich erinnere mich, dass ich in einem Chromium-Problem gelesen habe, dass sie immer nur die offiziellen Webdriver-Spezifikationen implementieren würden.

Jetzt ich wissen die allgemeine Antwort, wo “Spezifikationen nicht immer zu 100% befolgt werden” usw. Was ich jedoch wissen möchte, ist:

  • Können Sie den Code in Chromium finden, der dies implementiert? (Link wäre sehr willkommen)
  • Gab es Diskussionen darüber in der Chromium-Mailingliste?
  • Bleiben die “inoffiziellen” Befehle (die in der “alten” Selenium-Spezifikationsdatei dokumentiert sind) wahrscheinlich erhalten? Wo hast du das gelesen?

Offizielle Ortungsstrategien fur den Webdriver
unentdecktes Selen

Ja, du hast es richtig gesehen.

Nach aktuellem Stand WebDriver - W3C Candidate Recommendation der Locator Strategies eingetragen sind wie folgt:

  • "css selector" : CSS-Selektor
  • "link text" : Link-Textauswahl
  • "partial link text" : Partielle Link-Textauswahl
  • "tag name" : Verlinke den Namen
  • "xpath" : XPath-Selektor

Momentaufnahme:

Locator-Strategien

Allerdings ist die JsonWireProtocol wurde einst verwendet, um die zu unterstützen Locator-Strategien unten eingetragen, aber derzeit gibt die Dokumentation dies eindeutig an Status als OBSOLET :

  • class name : Gibt ein Element zurück, dessen Klassenname den Suchwert enthält; Zusammengesetzte Klassennamen sind nicht zulässig.
  • css selector : Gibt ein Element zurück, das mit einem CSS-Selektor übereinstimmt.
  • id : Gibt ein Element zurück, dessen ID-Attribut mit dem Suchwert übereinstimmt.
  • name : Gibt ein Element zurück, dessen NAME-Attribut mit dem Suchwert übereinstimmt.
  • link text : Gibt ein Ankerelement zurück, dessen sichtbarer Text mit dem Suchwert übereinstimmt.
  • partial link text : Gibt ein Ankerelement zurück, dessen sichtbarer Text teilweise mit dem Suchwert übereinstimmt.
  • tag name : Gibt ein Element zurück, dessen Tag-Name mit dem Suchwert übereinstimmt.
  • xpath : Gibt ein Element zurück, das mit einem XPath-Ausdruck übereinstimmt. Der bereitgestellte XPath-Ausdruck muss unverändert auf den Server angewendet werden; Wenn der Ausdruck nicht relativ zum Elementstamm ist, sollte der Server ihn nicht ändern. Folglich kann eine XPath-Abfrage Elemente zurückgeben, die nicht in der Unterstruktur des Stammelements enthalten sind.

Momentaufnahme:

Locator-Strategien

Die Änderung wurde durch die jeweiligen weitergegeben Klient spezifische Bindungen. Für die Selenium-Java Kunden hier ist die Client-Code wo wir das Switchcase haben, das für die Benutzer arbeitet:

        switch (using) {
          case "class name":
            toReturn.put("using", "css selector");
            toReturn.put("value", "." + cssEscape(value));
            break;

          case "id":
            toReturn.put("using", "css selector");
            toReturn.put("value", "#" + cssEscape(value));
            break;

          case "link text":
            // Do nothing
            break;

          case "name":
            toReturn.put("using", "css selector");
            toReturn.put("value", "*[name="" + value + ""]");
            break;

          case "partial link text":
            // Do nothing
            break;

          case "tag name":
            toReturn.put("using", "css selector");
            toReturn.put("value", cssEscape(value));
            break;

          case "xpath":
            // Do nothing
            break;
        }
        return toReturn;

Momentaufnahme:

JAVA_classname_id_name_tagname

Jetzt muss Ihre Frage lauten, warum diese Änderung in der W3C Specs und in der clients. Gem #1042 die Antwort von WebDriver-Mitwirkende war ziemlich direkt als:

This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.

  • Beim Vergleich von getElementById und querySelector habe ich festgestellt, dass getElementById schnell ist. Ich verstehe wirklich nicht, warum der ID-Locator veraltet ist. Bitte prüfe: jsperf.com/getelementbyid-vs-queryselector

    – Purendra Agrawal

    24. Juli 2018 um 16:36 Uhr

987250cookie-checkOffizielle Ortungsstrategien für den Webdriver

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy