LoginSignup
6
6

More than 1 year has passed since last update.

SeleniumでChromeDriverをちゃんと終了する

Last updated at Posted at 2021-12-09

webdriverをちゃんと終了しないと実行した分だけwebdriverのプロセスとブラウザーのプロセスが残る。
意図的にブラウザを開いたままにしておくというのでなければテスト後に正常に終了させたほうが良い。

Seleniumのサンプルコードclose()を使っているが、これだとChromeDriverが終了しない。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

一方でChromeDriverのサンプルコードを見てみるとquit()で終了されている。

import time

from selenium import webdriver


driver = webdriver.Chrome('/path/to/chromedriver')  # Optional argument, if not specified will search path.
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()

元々close()は現在のウィンドウの終了で、quit()は全てのウインドウとドライバーの終了という違いがあるが、ChromeDriverではquit()の実装がService.stop()も呼ぶように変更されている。
恐らくそうしないとドライバーを終了することができないのだろう。

with構文を使う

ここでWebdriverの実装を見てみると__enter__ __exit__が実装されており、__exit__quit()が呼ばれているのでwith構文を使えば同じことができるというのが分かる。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

with webdriver.Firefox() as driver:
    driver.get("http://www.python.org")
    assert "Python" in driver.title
    elem = driver.find_element_by_name("q")
    elem.clear()
    elem.send_keys("pycon")
    elem.send_keys(Keys.RETURN)
    assert "No results found." not in driver.page_source

特別な意図がない限りはこちらのほうがブラウザ毎の終了のさせ方の違いを吸収できるので覚えるには良いかと思う。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6