2016-06-14 16 views
2

と値によって、入力フィールドを見つける:は、このHTMLを考えると値なしの属性

<input id="test" value="my text" /> 

XPathとinput要素のハンドルを取得するのは簡単です。以下のような何か:

input[@value="my text"] 

しかし、どのような元のHTMLは次のように見える場合:

<input id="test" /> 

ブラウザで見ればそれはまだそれで「私のテキスト」を持っている - これはJavaScriptで追加されているので、このように:https://jsfiddle.net/justinwyllie/5dsxa8mc/

012:フィドルで

document.getElementById('test').value = 'my text'; 

あなたは、入力フィールドがワード(s)はそれで「私のテキスト」を持っていますが、value属性を持っていないことがわかります

この要素はどのようにして選択できますか?ちょうどxpath - jQueryはありません。

+0

したくない理由は何ですか要素を見つけるために 'id'を使うのですか?ありがとう。 – alecxe

+0

別の簡単な質問:あなたは 'selenium'を使って要素を探していますか? – alecxe

+0

LOL。はい。 Selenium Pythonバインディング私の実際の場合、IDはありません。要素はReactによって生成されます。唯一の識別要因はvalue属性でした。 Reactを更新したばかりで、最新のバージョン(15.1.0)ではvalue属性が設定されていないようです。 –

答えて

3

これは、Python +セレンである、私は次のようにそれに近づくだろうことを考慮すると:get_attribute("value")が、これは解決するだろう正確な理由です.value財産の計算値を取得することを

inputs = driver.find_elements_by_tag_name("input") # TODO: improve the locator to get less input elements 
input_elm = next(input_elm for input_elm in inputs 
       if input.get_attribute("value") == "my text") 

は注意問題。

も一致がないかどうnext()はあなたにStopIteration例外をスローすることを注意してください - あなたはtry/except経由でそれを処理するか、またはデフォルト値を提供することができ、次のいずれか

input_elm = next((input_elm for input_elm in inputs 
       if input.get_attribute("value") == "my text"), None) 
+0

それは動作します。 get_attribute( "value")をどうやってやることができるか分かりません。私は、値の属性が設定されているだけDOMにレンダリングされていないと思いますか? –

+0

@JustinWyllieそれは 'input'計算されたプロパティを読み込んでいます。属性とプロパティの違いは、http://stackoverflow.com/questions/6003819/properties-and-attributes-in-htmlを参照してください。 'get_attribute()'([source](https://github.com/SeleniumHQ/selenium/blob/master/py/selenium/webdriver/remote/webelement.py#L89)へのリンク)は、最初に存在するかどうかを確認します'value'プロパティと、この場合にそうであればそれを返します。それ以外の場合、 'value'属性が返されます。この属性は指定されていません。希望は少し物事を少しはっきりさせる。 – alecxe

+0

です。ご協力いただきありがとうございます。 –

関連する問題