環境:Windows selenium 3.141.0 Python 3.8.10 Chrome 90.0.4430.212 ChromeDriver 90.0.4430.24

最近發現執行完Selenium指令碼後,在個人的Temp目錄下會有大量的臨時資料夾。類似下面這樣









C:\Users\Administrator\AppData\Local\Temp\chrome_url_fetcher_19412_239410040

C:\Users\Administrator\AppData\Local\Temp\chrome_BITS_16176_1439591952

C:\Users\Administrator\AppData\Local\Temp\scoped_dir7672_2014177749

經過查閱,chrome_url_fetcher和chrome_BITS資料夾下的都在下載某個外掛。scoped_dir的則是因為啟動webdriver的時候沒有指定user data目錄,所以在Temp目錄下產生了一個臨時的配置檔案目錄。正常來說,當執行完後用driver.quit()應該會退出的,但原先的程式碼執行時在還沒到driver.quit()這一步時就已經失敗退出,所以Temp目錄下的檔案沒被刪除。

改進:

  1. 使用conftest和yield,將webdriver的初始化,登入和關閉瀏覽器定義為function級別的fixture

    原始碼:
def test_example():
driver = Driver().openBrowser()
login_page = LoginPage(driver)
login_page.login() home_page = HomePage(driver)
home_page.open_inventory() driver.quit()

新程式碼

conftest.py

@pytest.fixture(scope="function")
def driver():
# 前置
driver = Driver().openBrowser()
login_page = LoginPage(driver)
login_page.login()
print("初始化完成...")
yield driver
# 後置
driver.quit()
print("關閉瀏覽器...")
def test_example(driver):
home_page = HomePage(driver)
home_page.open_inventory()
  1. 禁止瀏覽器外掛更新 disable-component-update
class Driver:
def openBrowser(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--disable-component-update")
driver = webdriver.Chrome(options=chrome_options)
return driver