ページを調べて、見つかったすべてのヘルプボタンを開くヘルパー関数があります。それは素晴らしくてシンプルです。
def openHelp(ff):
"""
Opens all the help buttons on the screen
@type ff: instance of webdriver
@param ff: firefox instance of webdriver
"""
allHelpButtons = ff.find_elements_by_xpath('//a[@class="helpButton"]')
for helpButton in allHelpButtons:
helpButton.click()
ただし、一部のページでは、ヘルプボタンが対応するフィールドとともにjavascriptによって非表示になっている場合があります。これはElementNotVisibileException
、Seleniumがこれらの非表示のボタンをクリックしようとしたときに発生しているようです。
すべてのヘルプボタンはマークアップで同じように表示されますが、display:none
適用されていないため、そのように確認することはできません。それらはそのように表示されます。
<a class="helpButton" title="Help about: Field" href="#">
<img alt="Help about: Field" src="/static/images/helpIcon.png">
</a>
この例外が存在する場合、要素が表示されているかどうかを確認するために使用できるメソッドが必要であると思います。理想的には、リストに表示されているすべての要素のみを収集したいのですがallHelpButtons
、これに関するドキュメントが見つかりません。xpath検索でチェックを実行できますか、または要素が収集されたらチェックを実行する必要がありますか?
ボーナス質問
名前と値を一致させてリストアイテムを選択できるかどうかも疑問に思いました。たとえば、ページで[はい]/[いいえ]ラジオボタンの選択をul
;として定義しています。
<ul class="compact horizontal ">
<li>
<input id="id_fieldname_0_true" type="radio" value="True" name="fieldname">
<label for="id_fieldname_0_true">Yes</label>
</li>
<li>
<input id="id_fieldname_0_false" type="radio" value="False" name="fieldname">
<label for="id_fieldname_0_false">No</label>
</li>
</ul>
明らかにIDは一意ですが、セレクターを使用して「名前」と「値」を選択できるようにしたいと思います。これにより、値を渡すことができる汎用セレクターを簡単に作成できるようになると思います。