2013-04-02 8 views
10

は、現在、正しいXPath構文が<code>option</code>要素が現在</em></strong>が選択<strong><em>であるかどうかを確認するために、あるいは単に持つユーザー開いているページに、<code>select</code>要素から選択<code>option</code>要素を取得するには何のXPath

私はこの上の任意のドキュメントを見つけること、および(投機的)することはできませんが、試してみました:

  • //option[@selected=true]
  • //option[@selected="selected"]
  • //option[@selected]

が、これらの作品のどれも。彼らは単にどんな要素にもマッチしません。

答えて

13

短い答え:それはできません。

長い答え:XPathはHTML属性を見ることができますが、DOMプロパティを見ることはできません。 <select><option>要素を選択すると、trueselected財産<option>を変更し、またその親<select>要素のvalueプロパティを変更しますが、それはどちらかの属性に影響を与えませんので、XPathのには見えません。

selected属性セットを持つ<option>要素を見つけるには、ページ作成者が最初に選択されたオプションを決定する方法がよくありますが、//option[@selected]を使用できます。しかし、このではありません。は現在が選択されています。<option>です。ユーザーが選択した変更はXPathには見えません。ページ作成者がのいずれかの要素にselected属性を指定しなかった可能性があるため、の最初の選択肢がであることを保証するものではありません。ブラウザがデフォルトで最初のオプションを選択するか、 selectedプロパティを介して初期オプション。 //option[@selected]ようなセレクタは、ページをロードした後、ユーザによる選択の変化を検出することができること

複数はotheranswershereclaiming単に完全に間違っています。

もちろん、XPathセレクタの代わりにCSSセレクタを使用できる場合は、option:checkedを使用します。

-1

私は//option[@selected='true']

しようとするだろう(それが重要な場合は、私は両方のクロームデベロッパーコンソールで $x機能を使用して、Python用のSeleniumで find_elements_by_xpath方法を使用して。これを試してみました)

すなわちdriver.findElements(By.xpath("//option[@selected='true']")).getText();

1

問題は"(二重引用符)になる可能性があります。

//select/option[@selected='selected'] - 選択したオプションと一致しますが、これを正常に使用しています。

//select/option[@selected='selected' and @value='specific value'] - 選択したオプションに「特定の値」がある場合にのみ一致します。これも使用しています。

まだ問題が解決しない場合は、まったく別の問題になる可能性があります。オプションノードがない可能性があります。私はこれが役立つことを願っています

+0

を、違和感の第二ビットは変更される可能性があり、二重引用符の代わりに単一で私のXPathの文字列表現を引用提案がありますその行動。 XPathの最も古いバージョンであっても、これは誤りです。 [オリジナル仕様](http://www.w3.org/TR/xpath/#section-Introduction)、* "式の中で、リテラル文字列は一重引用符または二重引用符で区切られています" *。 –

+0

この答えが間違っている主な方法は何ですか? – 23inhouse

+2

全く動作しません。 '// select/option [@ selected = 'selected']'は現在選択されているオプションと一致しません。 'selected'属性が文字列' 'selected" 'に設定されているオプションと一致します。これは、最初に選択されたオプションであることも保証されていません( 'selected'属性の単なる*存在は、最初に選択された' option'をマークします;それが何であるかは関係ありません)。 (どのオプションが*現在*選択されているかは、 'selected'属性の存在または値とは完全に独立しています)。 –

0

私は@マークの答えとアカウントの知識を使うことができると思います。ちょうど属性希望したノード見つけてみましょう:この答えが間違っている主な方法のほかに

tree.xpath('//select/option[@selected]/text()')[0].strip() 
関連する問題