2009-10-15 27 views
26

Próbuję użyć SeleniumRC do przetestowania mojej aplikacji GWT i próbuję dopasować elementy za pomocą selektorów CSS.Jak mogę policzyć liczbę elementów pasujących do mojego selektora CSS?

Chcę policzyć liczbę włączonych przycisków w następującym kodzie HTML.

Przycisk jest aktywny, jeśli jest pod <td> z class="x-panel-btn-td " i niepełnosprawnych, jeżeli jest pod <td> z class="x-panel-btn-td x-hide-offsets".

W zasadzie chcę odzyskać liczbę przycisków pod wszystkimi <td> s z klasą 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

FYI, proszę przewinąć w dół, aby zobaczyć moją odpowiedź, jeśli szukasz dla Webdriver równoważnych – gorbysbm

Odpowiedz

15

O ile mi wiadomo, nie można tego zrobić za pomocą selektorów CSS, ale w Selenium jest polecenie do zliczania przez XPath. Następujące polecenie umożliwia sprawdzenie istnieją dwa przyciski niepełnosprawne:

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

w selen RC (Java) to będzie wyglądać bardziej jak

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

Zaakceptowanie tego jako odpowiedzi, ponieważ jest to bardziej proste w kategoriach selenu. –

+0

Tego właśnie potrzebuję, dziękuję! – huy

+1

Przydatne, ale oryginalny tytuł wymagał odpowiednika CSS, a nie XPath. – David

2

To powinno być względnie proste. Możesz zrobić to na wiele sposobów, ale proponuję użyć getEval(...) w DefaultSelenium.

napisać JavaScript że:

  1. pobiera wszystkie elementy przez ID: EXT-gen3506
  2. iteracje przez wszystkich elementów i sprawdza, czy jest włączone
  3. jeśli jest włączona, zwiększamy licznik
  4. "Zwróć" liczbę.

Ogólnie rzecz biorąc, getEval(...) zwróci wartość ostatniej instrukcji, która została uruchomiona ... aby podać liczbę.

+0

przycisków byłby mieć ten sam identyfikator ... (i skopiować wklejony tag przycisk tht i stąd ten sam identyfikator wyświetlany w kodzie źródłowym. moje złe.) Powinienem uzyskać wszystkie elementy przycisku typu. –

1

Od Selen jest częścią Firefox i ten ostatni jest wspieranie Selectors API jeden może uprościć liczenie dopasowań lokalizatora CSS przy użyciu testu podobnego do poniższego:

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

W tym przykładzie liczenie jest weryfikowane na 4, oczywiście.

+0

Czy to działa w przypadku innych przeglądarek, takich jak IE? Chcielibyśmy mieć rozwiązanie oparte na różnych przeglądarkach. – David

+0

należy zwrócić uwagę na tę metodę, w przeciwieństwie do zwykłych poleceń interfejsu API Selenium RC, należy pominąć "css =" jako prefiks dla lokalizatora. – David

+0

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

7

W nowszych wersjach Selenium dostępna jest funkcja GetCSSCount (lokalizator ciągów). Tylko, że aktualizacja do tej kwestii byłaby przydatna

+0

Ktoś wie, które wersje Selenium w szczególności to oferują? A w SElenium RC i WebDriver? Czy tylko WebDriver? – David

+0

Ponadto, zapomniałem zapytać wcześniej, które wersje Selenium pod względem JAR serwera, powiązania kodu klienta i/lub IDE. – David

10

To jest teraz również wdrożony (bez jakakolwiek dodatkowa magia Javascript potrzebna) w Selenium Webdriver API Ponieważ google wciąż łączy się z tym pytaniem jako najwyższym wynikiem, nawet jeśli Selenium RC został zastąpiony przez Webdriver, mam nadzieję, że to oszczędza komuś czasu.

Przykład kodu Java:

int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size(); 
Powiązane problemy