web-dev-qa-db-fra.com

Comment puis-je compter le nombre d'éléments correspondant à mon sélecteur CSS?

J'essaie d'utiliser SeleniumRC pour tester mon application GWT et j'essaie de faire correspondre des éléments à l'aide de sélecteurs CSS.

Je veux compter le nombre de boutons activés dans le code HTML suivant.

Un bouton est activé s'il se trouve sous un <td> avec class="x-panel-btn-td " et désactivé s'il est sous un <td> avec class="x-panel-btn-td x-hide-offsets".

Donc, fondamentalement, je veux récupérer le nombre de boutons sous tous <td>s avec la classe 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>
26
Nirmal Patel

Pour autant que je sache, vous ne pouvez pas le faire en utilisant des sélecteurs CSS, mais il existe une commande dans Selenium pour compter par XPath. La commande suivante vérifiera qu'il y a deux boutons désactivés:

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

Dans Selenium RC (Java), cela ressemblerait plus à

assertEquals(Selenium.getXpathCount("//td[contains(@class, 'x-hide-offsets')]//button"), 2);
15
Dave Hunt

Ceci est maintenant également implémenté (sans aucune magie Javascript supplémentaire nécessaire) dans API Selenium Webdriver Étant donné que Google renvoie toujours à cette question en tant que résultat supérieur, même si Selenium RC a été remplacé par Webdriver, j'espère que cela sauve quelqu'un temps.

Exemple Java code:

int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size();
12
gorbysbm

Avec les nouvelles versions de Selenium, il existe une fonction GetCSSCount (localisateur de chaînes). Je pensais juste qu'une mise à jour de cette question serait utile

8
Raidil142

Cela devrait être relativement simple. Vous pouvez le faire de plusieurs façons, mais je suggérerais d'utiliser la fonction getEval(...) dans DefaultSelenium.

Écrivez du code JavaScript qui:

  1. obtient tous les éléments par id: ext-gen3506
  2. parcourt tous les éléments et vérifie s'il est activé
  3. s'il est activé, incrémentez un nombre
  4. "retourner" le compte.

Généralement, getEval(...) renverra la valeur de la dernière instruction exécutée ... ce qui devrait vous donner le nombre.

2
vinnybad

Comme Selenium fait partie de Firefox et que ce dernier prend en charge l'API Selectors, on pourrait simplifier le comptage des correspondances d'un localisateur CSS en utilisant un test comme celui-ci:

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

Dans cet exemple, le nombre est vérifié à 4, bien sûr.

1
soletan

Voici une autre solution, en utilisant javascript, similaire à la publication sur Selector API/window.document.querySelectorAll:

http://blog.eviltester.com/2010/03/a-simple-getcsscount-helper-method-for-use-with-Selenium-rc.html

0
David