2012-04-19 8 views
3

私は自分のサイトのテストをしようとしています。ユーザーのフォームに問題があります。そのトリックは、フォーム内のテキストフィールドの数がユーザーオプションによって異なります(無効なものはコード内にありますが、スタイルは< displayed: none;>タグです)、私はすべての場所を見つけるよりも柔軟なアプローチを探しています要素を1つずつ追加し、フォームをtry/exceptブロックで埋めます。可視要素のxpathロケータが必要です

私は放火犯が唯一の必要な要素をXPathのロケータ

text_fields = driver.find_elements_by_xpath("//div[@class='form-line']/div[@class='form-inputs']/input[@type='text' and not(ancestor::div[@style='display: none;'])]")

トラブルを探している使用していますが、私はそれを使用するときに、私のセレンスクリプトは、text_fieldsのリストを印刷すると、私のすべての要素を与え、たとえない場合でも< displayed: none;>タグ

可視要素のみを取得するにはどうすればよいですか?重要な部分がある

text_fields = driver.find_elements_by_xpath(
    "//div[@class='form-line']/div[@class='form-inputs']/input[@type='text' and 
    not(ancestor::div[contains(@style, 'display: none;')])]") 

:スタイルは、文字列が含まれている場合、その

div[contains(@style, 'display: none;')] 

注意、

PS私の悪い英語のため申し訳ありません^ _^

+0

def make_an_order(ドライバ): text_fields = driver.find_elements_by_xpath( "// div [@ class = 'フォームライン']/div [@クラス= 'フォーム入力]]/input [@ type =' text 「text_fields内のフィールドのための) は: 試し: field.clear() 除く: パス は解決策を見つけました。しかし、質問はまだ興味深いです –

+0

は、jQueryを注入し、[':visible'](http://api.jquery.com/visible-selector/)セレクタを代わりに使用していますか? – Alp

答えて

4

通常の方法ですべてのフォーム要素を取得してから、リストを反復して、is_displayed()でtrueを返さない要素を削除できます。

+0

ありがとう、あなたの方法はうまく動作します! –

1

は方法を試してみてくださいdisplay:none;またはdisplay:noneの場合、セレクタは一致しません。

+0

私は言及するのを忘れましたが、まず_contains()_メソッドを試しました。同じ話 –

+0

あなたのhtmlを投稿してください – Alp

0

私は以下を使用し、それは素晴らしい動作します。

self.assertTrue(driver.find_element_by_xpath("//div[@id='game_icons']/div/div[2]/div/a/img")) 

これはもちろんSeleniumとPython用です。

関連する問題