4

私は自分のサイトのテストをしようとしています。一部のユーザーフォームで問題が発生しています。秘訣は、フォーム内のテキストフィールドの数がユーザーオプションによって異なることです(無効なものはコードに存在しますが、スタイル< displayed: none;>タグがあります)。したがって、すべての要素を見つけるよりも柔軟なアプローチを見つけようとしています。 1つずつフォームにtry/exceptブロックを入力します。

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;'])]")

問題は、firebugが必要な要素のみを見つけることですが、それをセレンスクリプトで使用すると、< >タグtext_fieldsがなくても、リストを印刷するとすべての要素が表示されます。displayed: none;

表示されている要素のみを取得するにはどうすればよいですか?

PS私の悪い英語でごめんなさい^_^

4

3 に答える 3

5

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

于 2012-04-20T11:45:05.397 に答える
1

contains()次の方法を試してください。

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;')]

スタイルに文字列display:none;またはが含まれている場合display:none、セレクターは一致しないことに注意してください。

于 2012-04-19T10:48:39.133 に答える
0

私は以下を使用し、それはうまくいきます。

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

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

于 2013-07-19T17:57:51.303 に答える