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: sé 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.