我有一个使用服务工作者和缓存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