web-dev-qa-db-fra.com

Stratégies de localisation officielles pour le pilote Web

Dans le documentation officielle du webdirver W3c , il est clairement indiqué que les stratégies de localisation sont:

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"

Cependant, protocole de fil de Selenium autorisé:

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

Dans THEORY, les documents de Selenium sont obsolètes et la "vraie" histoire est dans le nouveau document de spécification. Toutefois...

J'ai effectué des tests sur le dernier Webdriver de Chrome et je peux confirmer que name et class name les deux fonctionnent; cependant, ils ne figurent pas dans les spécifications.

Je me souviens avoir lu sur un problème Chromium qu'ils ne mettraient en œuvre que les spécifications officielles du Webdriver.

Maintenant: je connais la réponse générique, où "les spécifications ne sont pas toujours suivies à 100%" etc. Cependant, ce que j'aimerais savoir c'est:

  • Pouvez-vous trouver le code dans Chromium qui implémente cela? (le lien serait le bienvenu)
  • Y a-t-il eu des discussions à ce sujet dans la liste de diffusion Chromium?
  • Les commandes "non officielles" (qui sont documentées dans le "vieux" fichier de spécifications Selenium) sont-elles susceptibles de rester? Où avez-vous lu cela?
18
Merc

Oui, vous l'avez bien vu.

Selon le courant WebDriver - W3C Candidate Recommendation le (Locator Strategies enrôlés sont les suivants:

  • "css selector": sélecteur CSS
  • "link text": Sélecteur de texte de lien
  • "partial link text": Sélecteur de texte de lien partiel
  • "tag name": nom de la balise
  • "xpath": sélecteur XPath

Instantané:

Locator Strategies

Cependant, le JsonWireProtocol a déjà été utilisé pour prendre en charge le localisateur Stratégies répertoriées ci-dessous mais actuellement la documentation indique clairement que c'est Status as [~ # ~] obsolète [~ # ~] :

  • class name: renvoie un élément dont le nom de classe contient la valeur de recherche; les noms de classe composés ne sont pas autorisés.
  • css selector: renvoie un élément correspondant à un sélecteur CSS.
  • id: renvoie un élément dont l'attribut ID correspond à la valeur de recherche.
  • name: renvoie un élément dont l'attribut NAME correspond à la valeur de recherche.
  • link text: renvoie un élément d'ancrage dont le texte visible correspond à la valeur de recherche.
  • partial link text: renvoie un élément d'ancrage dont le texte visible correspond partiellement à la valeur de recherche.
  • tag name: renvoie un élément dont le nom de balise correspond à la valeur de recherche.
  • xpath: renvoie un élément correspondant à une expression XPath. L'expression XPath fournie doit être appliquée au serveur "en l'état"; si l'expression n'est pas relative à la racine de l'élément, le serveur ne doit pas la modifier. Par conséquent, une requête XPath peut renvoyer des éléments non contenus dans la sous-arborescence de l'élément racine.

Instantané:

Locator Strategies

Le changement a été propagé via les liaisons spécifiques respectives du client . Pour le Selenium-Java clients voici le code client où le boîtier de commutation fonctionne pour les utilisateurs:

        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;

Instantané:

Java_classname_id_name_tagname

Maintenant, votre question doit être pourquoi ce changement dans le W3C Specs et dans clients. Selon # 1042 la réponse des contributeurs WebDriver était assez simple:

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

20
DebanjanB