BETA

Seleniumでelement not interactableって怒られる場合でもエレメントを押下する方法

投稿日:2019-01-10
最終更新:2019-01-10
※この記事は外部サイト(https://qiita.com/Ricordanza/items/ace1c68...)からのクロス投稿です

ユーザーが特定のボタンを押下すると表示するカレンダー上のボタン(エレメントはspan)をseleniumで押下するために以下のようなコードを実装して動かして見たところ

# 事前にボタンを押下して対象のカレンダーを表示済み  
driver.find_elements_by_xpath("/PATH/TO/ELEMENT").click()

って怒られる。

element not interactable

エレメントの属性を確認していると、is_displayed()の戻り値はFalse。

element = driver.find_elements_by_xpath("/PATH/TO/ELEMENT")  
driver.execute_script("arguments[0].style.visibility='visible';", item)  
driver.execute_script("arguments[0].style.display='inline-block';", item)  
element.click()

とか頑張って見てもis_displayed()の戻り値はFalseのまま。

presence_of_element_locatedを使ってWaitをかけてもタイムアウトして一向に表示扱いになる気配なし。
そもそもブラウザ上での操作を見ていると対象のエレメントは表示されているし、きちんとブラウザの表示領域内に収まっている。
無論、自分で操作したら問題なく押下できている。

仕方ないのでアプローチを変更してエレメントのある領域を押下するという方法で今回は実現できた。

from selenium import webdriver  
...  
element = driver.find_elements_by_xpath("/PATH/TO/ELEMENT")  
action = webdriver.common.action_chains.ActionChains(driver)  
action.move_to_element_with_offset(element, 5, 5)  
action.click()  
action.perform()

無理やり感がちょっと強いが動くことが大事なテスト用のコードなので大目に見る。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@ricordanzaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!