2009-10-15 78 views
26

Estoy tratando de usar SeleniumRC para probar mi aplicación GWT y estoy tratando de hacer coincidir los elementos utilizando selectores de CSS.¿Cómo puedo contar la cantidad de elementos que coinciden con mi selector de CSS?

Quiero contar la cantidad de botones habilitados en el siguiente HTML.

Un botón se activa si está bajo una <td> con class="x-panel-btn-td " y discapacitados si está bajo una <td> con class="x-panel-btn-td x-hide-offsets".

Básicamente, quiero recuperar el número de botones debajo de todos <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> 
+0

su información, por favor, desplácese hacia abajo para ver mi respuesta si usted está buscando los equivalentes – gorbysbm

Respuesta

15

Que yo sepa, no se puede hacer esto usando selectores CSS, pero hay un comando en Selenium para contar por XPath. El siguiente comando verificará hay dos botones para minusválidos:

verifyXpathCount | //td[contains(@class, 'x-hide-offsets')]//button | 2 

En Selenio RC (Java) que esto se parezca más a

assertEquals(selenium.getXpathCount("//td[contains(@class, 'x-hide-offsets')]//button"), 2); 
+0

Aceptando esto como respuesta porque esto es más directo en términos de selenio. –

+0

Esto es lo que necesito, ¡gracias! – huy

+1

Útil, pero el título original pedía CSS equivalente, no XPath. – David

2

Esto debería ser relativamente simple. Puede hacerlo de varias maneras, pero yo sugeriría usar el getEval(...) en DefaultSelenium.

escribir algo de código JavaScript que:

  1. obtiene todos los elementos por ID: ext-gen3506
  2. itera a través de todos los elementos y los controles para ver si está habilitado
  3. si está habilitado, incrementar un recuento
  4. "devolver" el conteo.

En general, getEval(...) devolverá el valor de la última declaración que se ejecutó ... por lo que debería darle la cuenta.

+0

los botones WebDriver molestaría tener el mismo id ... (i copia pegada la etiqueta botón THT y por lo tanto la misma identificación que se muestra en el fragmento de código. my bad.) Debería obtener todos los elementos de tipo botón. –

1

Desde selenio es parte de Firefox y este último está apoyando Selectores API de uno podría simplificar partidos de conteo de un localizador CSS usando una prueba como esta:

verifyEval | window.document.querySelectorAll("your#css > selector.here").length | 4 

En este ejemplo se verifica el conteo a ser 4, por supuesto.

+0

¿Funciona esto para otros navegadores como IE? Idealmente, queremos una solución de navegador cruzado. – David

+0

Una cosa a tener en cuenta acerca de este método, a diferencia de los comandos regulares de Selenium RC API, omite "css =" como prefijo para el localizador. – David

+0

@David: ver http://caniuse.com/#feat=queryselector – soletan

7

Con las versiones más nuevas de Selenium, hay una función GetCSSCount (localizador de cadenas). Sólo pensó una actualización a esta pregunta sería útil

+0

¿Alguien sabe qué versiones de Selenium en particular ofrecen esto? ¿Y en SElenium RC y WebDriver? ¿O solo WebDriver? – David

+0

Además, se olvidó de preguntar antes, qué versiones de Selenium en términos de JAR del servidor, enlaces de código del cliente y/o el IDE. – David

10

Esto ahora se implementa también (sin se necesita magia Javascript adicional) en Selenium Webdriver API Dado que Google todavía enlaza a esta pregunta como un resultado superior, aunque Selenium RC ha sido reemplazado por Webdriver, es de esperar que esto le ahorre tiempo a alguien.

Ejemplo de código java:

int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size(); 
Cuestiones relacionadas