14

ユーザーとJavaScriptが対話した可能性のある開いているページで、option要素が現在option選択されているかどうかを確認するため、または要素から選択された要素を取得するための正しいXPath構文は何ですか? selectこれは XPath でも可能ですか、それとも DOM プロパティを調べる機能がありませんか?

これに関するドキュメントが見つからず、(推測で)試しました:

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

しかし、これらはどれも機能しません。どの要素とも一致しません。

$x(念のため、Chrome 開発者コンソールの関数とfind_elements_by_xpathSelenium for Python のメソッドの両方を使用してこれを試しました。)

4

5 に答える 5

24

簡単な答え: それは不可能です。

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

<option>属性が設定されている要素を見つけるselectedには、ページの作成者が最初にどのオプションを選択するかを決定する方法として、 を使用できます//option[@selected]。しかし、これは現在選択されているを見つけません。ユーザーが選択内容に加えた変更は、XPath には表示されません。ページの作成者がどの要素にも属性を設定せず、ブラウザにデフォルトで最初のオプションを選択させるか、JavaScript にプロパティを介して最初のオプションを選択させる可能性があるため、最初に選択されたオプションが見つかるという保証はありません。 .<option>selectedselected

ページの読み込み後にユーザーが行った選択の変更をセレクターが検出できると主張する の複数の回答は、単に完全に間違っています。 //option[@selected]

もちろん、XPath セレクターの代わりにCSSoption:checkedセレクターを使用できる場合は、それで問題ありません。

于 2013-08-01T08:10:09.083 に答える
0

@Markの回答からの知識を使用して、それを説明できると思います。必要な属性を持つノードを見つけてみましょう。

tree.xpath('//select/option[@selected]/text()')[0].strip()
于 2014-12-24T20:57:17.060 に答える
-2

私は試してみます//option[@selected='true']

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

于 2013-04-02T16:29:38.097 に答える