web-dev-qa-db-ja.com

CSSセレクターに一致する要素の数を数えるにはどうすればよいですか?

SeleniumRCを使用してGWTアプリをテストし、CSSセレクターを使用して要素を一致させようとしています。

次のHTMLで有効になっているボタンの数を数えたいのですが。

ボタンは<td>class="x-panel-btn-td "の下にある場合は有効になり、<td>class="x-panel-btn-td x-hide-offsets"の下にある場合は無効になります。

したがって、基本的には、<td>クラスを使用して、すべてのx-panel-btn-tdsの下にあるボタンの数を取得します。

<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

私が知る限り、CSSセレクターを使用してこれを行うことはできませんが、SeleniumにはXPathでカウントするコマンドがあります。次のコマンドは、2つの無効なボタンがあることを確認します。

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

Selenium RC(Java)では、これは次のようになります。

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

これも Selenium Webdriver API に実装されています(追加のJavaScriptマジックは必要ありません)== Selenium RCがWebdriverに置き換えられたとしても、Googleはこの質問へのトップリンクとしてリンクしているので、うまくいけば誰かを救います時間。

例Javaコード:

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

Seleniumの新しいバージョンでは、GetCSSCount(string locator)という関数があります。この質問の更新が役立つと思った

8
Raidil142

これは比較的単純なはずです。複数の方法で実行できますが、DefaultSeleniumでgetEval(...)を使用することをお勧めします。

次のようなJavaScriptを記述します。

  1. すべての要素をIDで取得します:ext-gen3506
  2. すべての要素を反復処理し、それが有効になっているかどうかを確認します
  3. 有効になっている場合は、カウントを増やします
  4. カウントを「返す」。

一般に、getEval(...)は、最後に実行されたステートメントの値を返します。そのため、カウントがわかります。

2
vinnybad

SeleniumはFirefoxの一部であり、後者はSelectors APIをサポートしているため、次のようなテストを使用してCSSロケーターの一致のカウントを簡略化できます。

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

この例では、カウントはもちろん4であることが検証されています。

1
soletan

これは、セレクターAPI/window.document.querySelectorAllに関する投稿と同様に、JavaScriptを使用した別のソリューションです。

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

0
David