我将硒用于chromeDriver的端到端测试。要测试的网站需要ssl证书。手动打开浏览器时,会弹出一个窗口,供我选择已安装的证书。不同的测试访问不同的URL,并且还需要不同的证书。但是,如果我以无头模式运行测试,则不会弹出窗口。因此,我需要一种以编程方式设置.pem要用于当前测试的证书(例如,设置文件)的方法。
我该如何实现?我尝试设置一个browserMob代理,然后将其配置为selenium中的代理-但是,这似乎没有任何作用...是否有更好的方法?我究竟做错了什么?这是我尝试过的:
PemFileCertificateSource pemFileCertificateSource = new PemFileCertificateSource(
new File("myCertificate.pem"),
new File("myPrivateKey.pem"),
"myPrivateKeyPassword");
ImpersonatingMitmManager mitmManager = ImpersonatingMitmManager.builder()
.rootCertificateSource(pemFileCertificateSource)
.build();
BrowserMobProxy browserMobProxy = new BrowserMobProxyServer();
browserMobProxy.setTrustAllServers(true);
browserMobProxy.setMitmManager(mitmManager);
browserMobProxy.start(8080);
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setProxy(ClientUtil.createSeleniumProxy(browserMobProxy));
WebDriver webDriver = new ChromeDriver(chromeOptions);
// use the webdriver for tests, e.g. assertEquals("foo", webDriver.findElement(...))
Run Code Online (Sandbox Code Playgroud) java selenium ssl-certificate selenium-webdriver browsermob-proxy
Nx 新手,还不确定何时将代码提取到库中有意义...是否可能/是否有意义使用第 3 方依赖项(比如说角度材料)构建 Nx 库,然后在本身不使用角度材料的应用程序?如果是这样,我是否需要为此使用可构建或可发布的库?
有许多不同的事件,都实现了相同的接口:
interface Event {}
class FooEvent implements Event {}
class BarEvent implements Event {}
Run Code Online (Sandbox Code Playgroud)
每个事件都有一个专用的处理程序:
interface EventHandler<T extends Event> {
void handle(T event);
}
class FooEventHandler implements EventHandler<FooEvent> {
@Override
public void handle(FooEvent event) { }
}
class BarEventHandler implements EventHandler<BarEvent> {
@Override
public void handle(BarEvent event) { }
}
Run Code Online (Sandbox Code Playgroud)
所有事件处理程序都创建一次并添加到地图中。每当事件发生时,都应使用此映射来查找正确的事件处理程序。
class Main {
Map<Class<? extends Event>, EventHandler<? extends Event>> eventHandlerRegistry = Map.of(
FooEvent.class, new FooEventHandler(),
BarEvent.class, new BarEventHandler()
);
void handleEvent(Event event) {
EventHandler<? extends Event> handler = this.eventHandlerRegistry.get(event.getClass()); …Run Code Online (Sandbox Code Playgroud) 我有一个带有谷歌云功能的 Firebase 项目,如下所示:
export const myFun = functions.region("europe-west1")
.runWith({ timeoutSeconds: 10, secrets: ['MY_SECRET'] })
.https.onCall((data, context) => {/*doStuff()*/});
Run Code Online (Sandbox Code Playgroud)
该函数使用 MY_SECRET 访问数据库。当我从本地计算机构建并部署此功能到谷歌云时,一切都工作得很好。我可以访问它并从数据库中获取结果,一切都很好。
不过,我设置了一个 github 操作来为我将此功能部署到云端。为此,我设置了一个服务帐户作为 github 秘密,这样我就可以npx firebase-tools deploy在 github 操作中运行。这一直有效,直到我将其添加secrets: ['MY_SECRET']到云功能中。
在本地我仍然可以成功部署,但是github操作失败:
Error: Failed to validate secret versions:
- FirebaseError HTTP Error: 403, Permission 'secretmanager.versions.get' denied for resource 'projects/my-project/secrets/MY_SECRET/versions/latest' (or it may not exist).
Run Code Online (Sandbox Code Playgroud)
我确保秘密确实存在于正确的谷歌云项目中,并且我在 github 中使用的服务帐户确实具有 role Secret Manager Secret Accessor ,但我仍然收到错误。
但我注意到的一件事是,当我转到浏览器中的秘密管理器并单击我的秘密时,我看到:
Resource ID projects/123456789/secrets/MY_SECRET
错误说projects/my-project/secrets/MY_SECRET/versions/latest
因此,在构建步骤中,使用项目名称,并且在秘密管理器中我看到项目 ID。不确定这是否相关,只是我注意到的......
为什么这不起作用?我尝试了几个小时,但越来越绝望,请帮助
firebase google-cloud-platform google-cloud-functions google-secret-manager