2013-09-03 15 views
6

問題:セレン/パイソン - CSSセレクタ経由で選択

CSSセレクタ固有の要素から選択できません。登録ユーザーがパスワードを正常に変更できることを確認する必要があります。私はそれを呼び出すためにクラスのさまざまな属性を試しました。最初の2つの例を試してみると、このメソッドの例外エラーが発生します。最後のtryはファーストクラスのインスタンスを呼び出し、パスワードフィールドをリセットします(失敗します)。

が試み:

driver.find_element_by_css_selector("value.Update").click() 
driver.find_element_by_css_selector("type.submit").click() 
driver.find_element_by_css_selector("input.test_button4").click() 

目的:

私は同じクラスを共有する項目を選択する必要があります。以下に見られるように、クラスは共有されています。

form id="changepw_form" name="changepw" action="#" method="post"> 
<div class="field3"> 
<div class="field3"> 
<div class="field3"> 
<input class="test_button4" type="reset" value="Reset" style"font-size:21px"=""> 
<input class="test_button4" type="submit" value="Update" style"font-size:21px"=""> 

答えて

12
driver.find_element_by_css_selector(".test_button4[value='Update']").click() 

編集した後であるものを返し:セレクタclassid、又はtagnameを必要とするが、それ自体によってvalue.Updateはどれもないので これらの。

.test_button4は一致するクラス名を提供し、そこからは[value='Update']が選択する特定の一致を指定します。

+0

あなたのソリューションがなぜ機能するのか、そしてOPからのものではないことを少し説明していただければ幸いです。 – fotanus

+0

@fonatus –

+1

それはそうだった、パット。私は 'driver.find_element_by_css_selector(" input.test_button4 "、value =" Update ")を試してみました。それを正解! – Dave

2
test_button4 = driver.find_elements_by_class_name('test_button4') # notice its "find_elementS" with an S 
submit_element = [x for x in test_button4 if x.get_attribute('value') == 'Update'] #this would work if you had unlimited things with class_name == 'test_button4', as long as only ONE of them is value="Update" 
if len(submit_element): # using a non-empty list as truthiness 
    print ("yay! found updated!") 

これは私がほとんどない、誰のドキュメントを参照して説明し、または使用するものです。

find_element_by_name()

(例えば、その最も単純な理由のために病気に使用名)は、単一のアイテムを返し、またはそれ

find_elements_by_name()、要素のリストを返す検索doesntの場合に例外を与えます。要素が見つからない場合、リストは空です

これで、Xエントリのリストが返された場合、その時点で残っているすべてのものが、古い形式のリスト内包どのように私はあなたが欲しい要素を知っている場合、私は私の答えで使用されるように)またはいくつかのインデックス作成。

get_attribute()もまた、深刻に利用されていません。それは=の前にあるものを使用して、要素の内部HTMLを解析し、=