在我的应用程序中,每个步骤都会生成 getImage API 调用,我想在每个步骤中获取该 API 调用的预览。 我尝试了下面的代码,但它给出了启动网站后生成的调用。
public void seleniumTest() throws InterruptedException {
driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
devTools.addListener(Network.requestWillBeSent(), requestConsumer -> {
Request request = requestConsumer.getRequest();
System.out.println(request.getUrl());
});
devTools.addListener(Network.responseReceived(), responseConsumer -> {
Response response = responseConsumer.getResponse();
System.out.println(response.getStatus() + " " + response.getUrl());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
driver.get("https://stagedesigner.artifi.net//APIDesigner?personalization=d2Vic2l0ZUlkPTE0NSZ3ZWJBcGlDbGllbnRLZXk9NWFiNjczNzYtNTU1NS00YzMwLWE3ODAtNThiODQyNWE2MmY2JnByb2R1Y3RDb2RlPUFVVE8xJnVzZXJJZD11bmRlZmluZWQ");
}
要捕获网络响应,特别是对于 Selenium 测试中的 getImage 等特定 API 调用,您可以通过 Selenium 的 DevTools 界面使用 Chrome DevTools Protocol (CDP),从而走上正确的道路。但是,在您的方法中需要进行一些调整和注意事项,以确保您在所需的时间捕获网络响应。
您当前的实现为 requestWillBeSent 和 responseReceived 事件设置了侦听器,但您希望捕获应用程序中不同步骤触发的特定 API 调用的响应。这是一种增强的方法:
public void seleniumTest() throws InterruptedException {
driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
devTools.addListener(Network.responseReceived(), responseConsumer -> {
Response response = responseConsumer.getResponse();
// Filter for specific API calls, e.g., getImage
if (response.getUrl().contains("getImage")) {
System.out.println("getImage call: " + response.getStatus() + " " + response.getUrl());
// Optional: Fetch response body here if needed
}
});
driver.get("https://stagedesigner.artifi.net/APIDesigner?...");
// Perform steps in your application and wait for necessary conditions
// For example, clicking a button or waiting for an element
// Ensure you wait for the network calls to complete after each step
}
// Optionally, you can add a method to fetch the response body
private String getResponseBody(String requestId) {
// Implement fetching of response body using requestId
}