Estrategias de localización oficial para el webdriver.

Resuelto Merc asked hace 6 años • 1 respuestas

En la documentación oficial del controlador web del W3C , se indica claramente que las estrategias de ubicación son:

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"

Sin embargo, el protocolo de conexión de Selenium permitió:

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

En teoría , la documentación de Selenium está obsoleta y la historia "real" está en el nuevo documento de especificaciones. Sin embargo...

Realicé algunas pruebas en el último Webdriver de Chrome y puedo confirmar que nameambos class namefuncionan; sin embargo, no están en las especificaciones.

Recuerdo haber leído en un problema de Chromium que solo implementarían las especificaciones oficiales de Webdriver.

Ahora: conozco la respuesta genérica, donde "las especificaciones no siempre se siguen al 100%", etc. Sin embargo, me gustaría saber:

  • ¿Puedes encontrar el código en Chromium que implementa esto? (un enlace sería bienvenido)
  • ¿Ha habido discusiones sobre estos en la lista de correo de Chromium?
  • ¿Es probable que se mantengan los comandos "no oficiales" (que están documentados en el "antiguo" archivo de especificaciones de Selenium)? ¿Dónde está la evidencia de ello?
Merc avatar Jan 21 '18 23:01 Merc
Aceptado

Sí, lo viste bien.

Según el WebDriver actual: recomendación de candidatos del W3C, las estrategias de localización incluidas son las siguientes:

  • "selector de CSS" : selector de CSS
  • "texto de enlace" : selector de texto de enlace
  • "texto de enlace parcial" : selector de texto de enlace parcial
  • "nombre de etiqueta" : nombre de etiqueta
  • "xpath" : selector XPath

Instantánea:

Estrategias de localización

Sin embargo, el JsonWireProtocol alguna vez se usó para respaldar las estrategias de localización que se enumeran a continuación, pero actualmente la documentación indica claramente su estado como obsoleto :

  • nombre de clase : Devuelve un elemento cuyo nombre de clase contiene el valor de búsqueda; No se permiten nombres de clases compuestos.
  • selector css : devuelve un elemento que coincide con un selector CSS.
  • id : Devuelve un elemento cuyo atributo ID coincide con el valor de búsqueda.
  • nombre : Devuelve un elemento cuyo atributo NOMBRE coincide con el valor de búsqueda.
  • texto del enlace : Devuelve un elemento ancla cuyo texto visible coincide con el valor de búsqueda.
  • texto de enlace parcial : Devuelve un elemento ancla cuyo texto visible coincide parcialmente con el valor de búsqueda.
  • nombre de etiqueta : Devuelve un elemento cuyo nombre de etiqueta coincide con el valor de búsqueda.
  • xpath : Devuelve un elemento que coincide con una expresión XPath. La expresión XPath proporcionada debe aplicarse al servidor "tal cual"; si la expresión no es relativa a la raíz del elemento, el servidor no debería modificarla. En consecuencia, una consulta XPath puede devolver elementos no contenidos en el subárbol del elemento raíz.

Instantánea:

Estrategias de localización

El cambio se propagó a través de los respectivos enlaces específicos del cliente . Para los clientes de Selenium-Java, aquí está el código del cliente donde tenemos el caso del interruptor funcionando para los usuarios:

        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;
Expandir fragmento

Instantánea:

JAVA_nombredeclase_id_nombre_nombredeetiqueta

Ahora bien, tu pregunta debe ser por qué este cambio en la especificación del W3C y en los clientes . Según el n.° 1042, la respuesta de los colaboradores de WebDriver fue bastante sencilla:

Esto mantiene la especificación simple, ya que se pueden implementar usando el selector CSS, que se asigna a querySelector/querySelectorAll.

undetected Selenium avatar Jan 22 '2018 07:01 undetected Selenium