環境: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目錄下的檔案沒被刪除。
改進:
- 使用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()
- 禁止瀏覽器外掛更新 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