ウェブブラウザの自動テストにおいて、クリックできない場所にあるエレメントはclick()できない
タイトルだけ見ると、当たり前すぎて何言ってんの感があるわけだが。
こんなWebページがあるとする・・・クリッカブルマップがあり、そのマップ上の地点をクリックすると、その地点に関するとあるデータがダウンロードできるようなWebページが。
この地点が膨大にあるので、seleniumを使って、マップ上のすべてのdivをクリックする、みたいな自動ツールを作った。
ちとイケてないが、あらすじはこんな感じだ。
from selenium import webdriver from selenium.webdriver.support.ui import Select driver = webdriver.Chrome(…) driver.get(url) for i in range(100): xpath = "//div[@id='hoge']/div[{0}]".format(i) element = driver.find_element_by_xpath(xpath) element.click()
そのマップのサイズがすごく大きかったりして、スクロールしないと見えない領域があると、click()してもクリックされた挙動にならない。これはよく考えれば当たり前の事なのだが、seleniumにおいては、click()できなかったからといって、例外を吐いてくれたりはせず、何事も起きないので、注意が必要である。
今回の処理においては、ダウンロード前にチェックが走り、「地点が選択されていません」のalertが出るので、alertが出たかどうかをチェックすることで回避した。