locators - selenium how to find css selector
¿Cómo puedo contar la cantidad de elementos que coinciden con mi selector de CSS? (6)
Intento usar SeleniumRC para probar mi aplicación GWT y estoy tratando de hacer coincidir elementos utilizando selectores de CSS.
Quiero contar la cantidad de botones habilitados en el siguiente HTML.
Se habilita un botón si está bajo <td>
con class="x-panel-btn-td "
y está deshabilitado si está bajo <td>
con class="x-panel-btn-td x-hide-offsets"
.
Básicamente, quiero recuperar el número de botones debajo de todos los <td>
s con la clase x-panel-btn-td
.
<table cellspacing="0">
<tbody>
<tr>
<td id="ext-gen3504" class="x-panel-btn-td ">
<em unselectable="on">
<button id="ext-gen3506" class="x-btn-text" type="button">OK</button>
</em>
</td>
<td id="ext-gen3512" class="x-panel-btn-td x-hide-offsets">
<em unselectable="on">
<button id="ext-gen3506" class="x-btn-text" type="button">Yes</button>
</em>
</td>
<td id="ext-gen3520" class="x-panel-btn-td">
<em unselectable="on">
<button id="ext-gen3506" class="x-btn-text" type="button">No</button>
</em>
</td>
<td id="ext-gen3528" class="x-panel-btn-td x-hide-offsets">
<em unselectable="on">
<button id="ext-gen3506" class="x-btn-text" type="button">Cancel</button>
</em>
</td>
</tr>
</tbody>
</table>
Ahora esto también está implementado (sin necesidad de magia extra de Javascript) en Selenium Webdriver API. Dado que Google todavía enlaza a esta pregunta como un resultado principal, aunque Selenium RC ha sido reemplazado por Webdriver, con suerte le ahorrará tiempo a alguien.
Ejemplo de código java:
int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size();
Aquí hay otra solución, usando javascript, similar a la publicación sobre Selector API / window.document.querySelectorAll:
http://blog.eviltester.com/2010/03/a-simple-getcsscount-helper-method-for-use-with-selenium-rc.html
Como Selenium es parte de Firefox y este último es compatible con la API de Selectores, se podría simplificar el conteo de las coincidencias de un localizador de CSS con una prueba como esta:
verifyEval | window.document.querySelectorAll("your#css > selector.here").length | 4
En este ejemplo, el conteo se verifica como 4, por supuesto.
Con las versiones más nuevas de Selenium, hay una función GetCSSCount (localizador de cadenas). Solo pensé que una actualización de esta pregunta sería útil
Esto debería ser relativamente simple. Puedes hacerlo de múltiples maneras, pero te sugiero usar el getEval(...)
en DefaultSelenium.
Escriba algunos JavaScript que:
- obtiene todos los elementos por id: ext-gen3506
- itera a través de todos los elementos y comprueba si está habilitado
- si está habilitado, incrementa un conteo
- "devolver" el conteo.
En general, getEval(...)
devolverá el valor de la última declaración que se ejecutó ... por lo que debería darle el conteo.
Por lo que sé, no puedes hacer esto usando selectores CSS, pero hay un comando en Selenium para contar por XPath. El siguiente comando verificará que haya dos botones desactivados:
verifyXpathCount | //td[contains(@class, ''x-hide-offsets'')]//button | 2
En Selenium RC (Java) esto se parecería más a
assertEquals(selenium.getXpathCount("//td[contains(@class, ''x-hide-offsets'')]//button"), 2);