javascript google-chrome selenium chromium chrome-web-driver

javascript - Estrategias oficiales de localización para el controlador web



google-chrome selenium (1)

En la documentación oficial de W3c webdirver , se establece 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 cable de Selenium permitió:

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

En THEORY, los documentos de Selenium son obsoletos y la historia "real" está en el nuevo documento de especificaciones. Sin embargo...

Ejecuté algunas pruebas en el último Webdriver de Chrome, y puedo confirmar que el name y el class name funcionan; Sin embargo, no están en las especificaciones.

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

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

  • ¿Puedes encontrar el código en Chromium que implementa esto? (el enlace sería muy bienvenido)
  • ¿Ha habido discusiones sobre esto en la lista de correo de Chromium?
  • ¿Es probable que se mantengan los comandos "no oficiales" (que están documentados en el archivo de especificaciones de selenio "antiguo")? ¿Dónde leíste así?

Sí, lo viste bien.

Según el WebDriver - W3C Candidate Recommendation actual WebDriver - W3C Candidate Recommendation del WebDriver - W3C Candidate Recommendation las Locator Strategies incluidas son las siguientes:

  • "css selector" : selector CSS
  • "link text" : selector de texto de enlace
  • "partial link text" : selector de texto de enlace parcial
  • "tag name" : nombre de etiqueta
  • "xpath" : selector XPath

Instantánea

Sin embargo, el JsonWireProtocol se usó una vez para respaldar las Estrategias de localización JsonWireProtocol a continuación, pero actualmente la documentación indica claramente su Estado como OBSOLETO :

  • class name : devuelve un elemento cuyo nombre de clase contiene el valor de búsqueda; los nombres de clase compuestos no están permitidos.
  • css selector : devuelve un elemento que coincide con un selector CSS.
  • id : devuelve un elemento cuyo atributo ID coincide con el valor de búsqueda.
  • name : Devuelve un elemento cuyo atributo NAME coincide con el valor de búsqueda.
  • link text : devuelve un elemento de anclaje cuyo texto visible coincide con el valor de búsqueda.
  • partial link text : devuelve un elemento de ancla cuyo texto visible coincide parcialmente con el valor de búsqueda.
  • tag name : 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 al elemento raíz, el servidor no debe modificarla. En consecuencia, una consulta XPath puede devolver elementos no contenidos en el subárbol del elemento raíz.

Instantánea

El cambio se propagó a través de los enlaces específicos del cliente respectivos. Para los clientes Selenium-Java , aquí está el código del cliente donde tenemos el switchcase 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;

Instantánea

Ahora, su pregunta debe ser por qué este cambio en las W3C Specs y en los clients . Según el #1042 la Respuesta de los Colaboradores de WebDriver fue bastante directa como:

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