【Selenium】expected_conditionsの使い方
SeleniumのWebDriverで、
期待したコンディションかどうか調べるexpected_conditionsをよく使うので、備忘録(日本語訳がなかったので、、、)
公式リファレンスはこちら
selenium-python.readthedocs.io
expected_conditions classで使用できる関数のリスト
- title_is
- title_contains
- presence_of_element_located
- visibility_of_element_located
- visibility_of
- presence_of_all_elements_located
- text_to_be_present_in_element
- text_to_be_present_in_element_value
- frame_to_be_available_and_switch_to_it
- invisibility_of_element_located
- element_to_be_clickable
- staleness_of
- element_to_be_selected
- element_located_to_be_selected
- element_selection_state_to_be
- element_located_selection_state_to_be
- alert_is_present
使用例
(id="someid" の要素がクリックできるまで待つ。10秒経ってもクリックできるようにならなかったら、例外エラー発生)
*title_is(title)
ページのタイトルが引数titleと同じか。
戻り値:ページのタイトルが引数titleと同じならtrue, 違うならfalse
解説
wait.until(EC.title_is(title))のように、wait.until内で使用する場合、wait.untill(false)で例外エラーになります。)
*title_contains(title)
ページのタイトルが引数titleを含んだタイトルか。
戻り値:ページのタイトルが引数titleを含んだタイトルならtrue, 違うならfalse
*presence_of_element_located(locator)
ページのDOMに、locatorで指定した要素が存在するか。cssなどでhiddenやinvisibleになっていても、存在するとみなす。(コード内に要素が表示されていればOK)
戻り値: locatorで指定した要素が存在すれば、その要素。存在しないならfalse
詳細:
引数のlocatorは(By.ID, 'someid') のような物です。なので使う時は、EC.presence_of_element_located(By.ID, 'someid') のように使用。
by.IDなど、byの後に指定できる物のリストはこちら
*visibility_of_element_located(locator)
ページのDOMに、引数locatorで指定した要素がvisibleかつ、要素のwidth&heightが0以上か
戻り値: locatorで指定した要素がvisibleかつ、要素のwidth&heightが0以上になれば、その要素。それ以外ならfalse
*visibility_of(element)
ページのDOMに、引数elementで指定した要素がvisibleかつ、要素のwidth&heightが0以上か
戻り値: elementで指定した要素がvisibleかつ、要素のwidth&heightが0以上になれば、その要素。それ以外ならfalse
詳細:
引数のelementは、username = driver.find_element_by_name('username') のようにfind_element系の関数で取得した物。なので使う時は、EC.visibility_of(username)のように使用。
find_element系の関数の詳細はこちら
*presence_of_all_elements_located(locator)
ページのDOMに、locatorで指定した要素が、一つ以上存在するか。cssなどでhiddenやinvisibleになっていても、存在するとみなす。(コード内に要素が表示されていればOK
戻り値: locatorで指定した要素が一つ以上存在すれば、その要素のリスト(配列)。存在しないならfalse
*text_to_be_present_in_element(locator, text)
locatorで指定した要素内に、textで指定した文字列が存在するか
戻り値:記載なかったですが、おそらくlocatorで指定した要素内に、textで指定した文字列が存在するならtrue, それ以外ならfalse
*text_to_be_present_in_element_value(locator, text)
locatorで指定した要素のvalue内に、textで指定した文字列が存在するようになるまで待つ。
戻り値:記載なかったですが、おそらくlocatorで指定した要素のテキスト内に、textで指定した文字列が存在するならtrue,それ以外ならfalse
解説:text_to_be_present_in_elementとtext_to_be_present_in_element_valueの違い
text_to_be_present_in_element((By.ID, 'someid'), 'text') でtrue
<p id="someid">this is text</p>
text_to_be_present_in_element_value((By.ID, 'someid'), 'text') でtrue
<input id="someid" type="button" value="button text value">
参考:
*frame_to_be_available_and_switch_to_it(locator)
locatorで指定した要素が(フレームとして)切替可能か
戻り値:切替可能ならtrue, 不能ならfalse
*invisibility_of_element_located(locator)
visibility_of_element_located の逆
戻り値: 記載なかったですが、locatorで指定した要素がvisibleかつ、要素のwidth&heightが0以上になれば、false。それ以外ならtrue
*element_to_be_clickable(locator)
locatorで指定した要素がクリック可能か
戻り値:記載なかったですが、クリック可能ならtrue, 不能ならfalse
*staleness_of(element)
DOMツリーの中に、elementで指定した要素が無くなるまで待つ。
戻り値:elementで指定した要素がまだあればfalse, それ以外ならtrue(これって、要素が無くなるまで待つ最大時間はどこで指定するのかな、、、、?)
*element_to_be_selected(element)
elementで指定した要素が選択されているか(select option)
戻り値:elementで指定した要素が選択されていればtrue, それ以外ならfalse
*element_located_to_be_selected(locator)
locatorで指定した要素が選択されているか(select option)
戻り値:locatorで指定した要素が選択されていればtrue, それ以外ならfalse
*element_selection_state_to_be(element, is_selected)
引数is_selectedがtrueなら、elementで指定した要素が選択されているか。falseならelementで指定した要素が選択されていないか。
戻り値:引数is_selectedがtrueなら、elementで指定した要素が選択されていればtrue, それ以外ならfalse 。引数is_selectedがfalseなら逆。
*element_located_selection_state_to_be(locator, is_selected)
element_selection_state_to_beのlocatorバージョン
戻り値:引数is_selectedがtrueなら、locatorで指定した要素が選択されていればtrue, それ以外ならfalse 。引数is_selectedがfalseなら逆。
*alert_is_present()
引数なし。アラートが存在しているか
戻り値: アラートが存在していればtrue,それ以外はfalse
以上ですー!
WebDriverには段々と慣れてきましたが、そろそろpython の文法をしっかりやらないと、、、少し複雑なコードになると読めない >< 地道にやっていこうと思います。
おやすみーーー