2017-03-12 6 views
1

アンダースコアを含む特定の名前のラベルの横にあるチェックボックスを参照しようとしています。ラベルの近くの要素を入力するXPath?

例DOMは、目的は私がセレンでそれをクリックすることができますのでinput要素を選択することです

<div id="form-2143"> 
    <div id="wrap-1353"> 
    <label id="numberfield-1234-label"> 
     <span class="x-form-label">admin_user&nbsp</span> 
    </label> 
    <input type="checkbox" id="checkbox-1353" 
      class="form-field" componentid="cb1353"> 
</div> 
    ... 
</div> 

のように見えます。

私の理解するために、次のXPathは動作するはず

//label[span[contains(string(),"admin_user")]]../input 

の問題は、上記の作品だけが「管理者」ではない「ADMIN_USER」と。 「admin」だけで複数の結果が得られます。私はテストしているサイトで簡単に奇妙なものになるかもしれないが、それは '_'と関係があるとしか思えない。 「ADMIN_USER」の2つの例で: 私はまた、したがって、その後

+0

あなたの表現が正しく機能していますか? XPathが無効になっていると思われます。 '// label [span] /../ input'でも構いませんが、' // label [span] ../ input'ではありません。注意 '/../' – Andersson

答えて

2

アンダースコア(_)のXPathには、特別な規定(サブ)STRIを必要としませんテスト。

//div[label[contains(., 'admin_user')]]/input 

は、文字列値サブadmin_userが含まれているlabelが含まれていdiv内に含まれるinput要素を選択し、あなたのHTMLが整形するように補正を考えると

<div id="form-2143"> 
    <div id="wrap-1353"> 
    <label id="numberfield-1234-label"> 
     <span class="x-form-label">admin_user&nbsp;</span> 
    </label> 
    <input type="checkbox" id="checkbox-1353" 
      class="form-field" componentid="cb1353"/> 
</div> 
    ... 
</div> 

このXPathの、 。

0

ダウンあなたは例えば再び

//label//span[contains(text(),'admin_user')]/../../input 

をレベルアップするために忘れてい上がる、ラベルと入力の順序を保証することはできませんそして "admin_test"

<div id="form-2143"> 
    <div id="wrap-1353"> 
    <label id="numberfield-1234-label"> 
     <span class="x-form-label">admin_user</span> 
    </label> 
    <input type="checkbox" id="checkbox-1353" class="form-field" componentid="cb1353"> 
</div> 
<label id="numberfield-1234-label"> 
     <span class="x-form-label">admin_test</span> 
    </label> 
    <input type="checkbox" id="checkbox-1353" class="form-field" componentid="cb1353"> 
</div> 
</div> 

enter image description here

関連する問題