我有一個使用服務工作者和緩存API的應用程序。 Service Worker中使用的緩存名稱包含GIT修訂版(散列),因此每個版本都使用新的緩存並刪除舊的緩存。這是爲了讓100%的用戶始終能夠獲得最新的資源(對於預期的發佈時間表,這種情況很好)。在硒中測試服務工作者和緩存
我使用Selenium每天運行幾次的Java(WebDriver)測試(比方說,當GIT repo發生變化時),我想確保工作人員的緩存正在被正確擦除新的GIT修訂版。
默認情況下,Selenium正在爲每個瀏覽器會話創建一個新的臨時概要文件目錄,這意味着在測試開始時總是沒有緩存。我想,雖然使用緩存,我的想法是(讓我們談談關於Firefox現在):
- 保留一些模型簡介目錄
- 當硒啓動火狐,通過模型配置文件到新的臨時配置文件,例如
new FirefoxProfile(new File(PROFILE_MODEL))
- 這將確保一些緩存中之前開始瀏覽器
- 一旦測試完成,備份臨時配置文件(因爲它包含更新緩存)和替換(現在年紀大了)
PROFILE_MODEL
與最新的配置文件,以便下一次測試運行將使用此更新緩存再次
的「模型輪廓文件更新步驟」在試運行的結束是這樣的僞代碼
File modelDir = new File(PROFILE_MODEL);
// copy current model for backup
bckPath = Files.createTempDirectory("bckProfile");
Util.copy(modelDir, bckPath);
// remove the now obsolete PROFILE_MODEL
Util.deleteDirectory(modelDir);
// copy current profile to the model dir
File profileSnapshot = currentProfile.layoutOnDisk();
Util.copy(profileSnapshot.toPath(), modelPath);
的問題是,雖然,在C所有currentProfile.layoutOnDisk();
似乎並沒有包含任何緩存相關的信息,我不知道如何獲得當前正在使用的臨時配置文件的路徑(在Linux中,通常類似於/tmp/anonymous6209009552324183685webdriver-profile
所以基本上我的問題是,如何保護和控制瀏覽器(Firefox)緩存跨多個測試運行?我知道通常希望在測試中啓動帶有新緩存的瀏覽器,但我認爲對於測試服務人員的這種特殊情況,對其進行一些控制是非常有用的。
請注意,我跑在CI服務器測試,所以一些手動解決方案可能是相當困難的(但是,嘿,至少它可以點我的一些方向?)
更新:我可以啓動Firefox的配置文件與
profile = new ProfilesIni().getProfile("test")
,然後知道實際的路徑,以「測試」模式的個人資料(型號,而不是由getProfile調用創建副本),我可以從調用ProfilesIni().getProfile("test")
在更換它與那些所有文件測試結束,但這似乎並沒有例如複製訪問過的頁面的歷史。
更新2:這是我如何啓動瀏覽器:
caps = DesiredCapabilities.firefox();
FirefoxProfile sampleProfile = new ProfilesIni().getProfile("test");
caps.setCapability(FirefoxDriver.PROFILE, sampleProfile);
browser = new FirefoxDriver(caps);
,我可以看到它創建了2個人臨時文件夾:
- 一個由呼叫
new ProfilesIni().getProfile("test")
創建,它贏得在測試過程中不會得到更新 - 第二個是從
FirefoxDriver.startClient
創建的方法,該方法調用NewProfileExtensionConnection.start
然後調用FirefoxProfile.layoutOnDisk
現在在測試過程中,只有第二個配置文件正在更新,我猜是有道理的。問題是,如何獲取從功能創建的實際輪廓目錄,可...
這是偉大的。我想知道用cookies做同樣的事情。這是如何完成的? – conteh