XPATHで兄弟の情報から要素を指定する。

Seleniumなどを使っているとHTMLの要素の中からリンクであったりテキストを探して来なければならないときがあります。厳密にClassやIDが割り振ってあるHTMLならばfindElement関数でWebDriverBy::idやWebDriverBy::classだけで一意に要素が指定できるのですが、IDやClassが割り振っていないものだと要素を一意に指定するのが難しくなります。そういう時はWebDriverBy::xpathで周囲の要素との関係から要素してみましょう。

今回は兄弟関係で要素を指定する場合についてまとめます。これは例えばテーブルなどでindexの文字に応じた要素を引き出すのに便利です

<html>
    <head></head>
    <body>
        <table>
            <tr>
                <th>名前</th>
                <th>年齢</th>
            </tr>
            <tr>
                <td id="name">ベン</td>
                <td id="age">27</td>
            </tr>
            <tr>
                <td id="name">マイケル</td>
                <td id="age">42</td>
            </tr>
        </table>
    </body>
</html>

このような例でマイケルの年齢をもつ要素持ってきたい時は

//td[contains(text(), 'ベン')]/following-sibling::td[@id='age']

とかくといいです。following-siblingは下に続いてる兄弟の要素を指定します。逆に上に指定したい要素がある時はpreceding-siblingです。