Skip to content

Commit

Permalink
#2550 #2567 to make logs more readable, extract lambdas to named classes
Browse files Browse the repository at this point in the history
  • Loading branch information
asolntsev committed Feb 3, 2024
1 parent 88a88ee commit d03c21d
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.HasDevTools;
import org.openqa.selenium.devtools.v120.browser.Browser;
import org.openqa.selenium.devtools.v120.browser.model.DownloadProgress;
import org.openqa.selenium.devtools.v120.browser.model.DownloadWillBegin;
import org.openqa.selenium.devtools.v120.page.Page;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -20,16 +22,22 @@
import java.io.File;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;

import static com.codeborne.selenide.impl.FileHelper.moveFile;
import static java.util.Collections.emptyMap;
import static org.openqa.selenium.devtools.v120.browser.Browser.downloadProgress;
import static org.openqa.selenium.devtools.v120.browser.Browser.downloadWillBegin;
import static org.openqa.selenium.devtools.v120.browser.model.DownloadProgress.State.CANCELED;
import static org.openqa.selenium.devtools.v120.browser.model.DownloadProgress.State.COMPLETED;

@ParametersAreNonnullByDefault
public class DownloadFileToFolderCdp {
private static final Logger log = LoggerFactory.getLogger(DownloadFileToFolderCdp.class);
private static final AtomicLong SEQUENCE = new AtomicLong();

private final Downloader downloader;

DownloadFileToFolderCdp(Downloader downloader) {
Expand Down Expand Up @@ -120,25 +128,45 @@ private void prepareDownloadWithCdp(Driver driver, DevTools devTools,
Optional.of(true)));

devTools.clearListeners();
devTools.addListener(downloadWillBegin(), new DownloadWillBeginListener(id(), fileName));
devTools.addListener(downloadProgress(), new DownloadProgressListener(id(), driver, downloadComplete, timeout));
}

private static long id() {
return SEQUENCE.incrementAndGet();
}

devTools.addListener(Browser.downloadWillBegin(), handler -> {
private record DownloadWillBeginListener(long id, AtomicReference<String> fileName) implements Consumer<DownloadWillBegin> {
@Override
public void accept(DownloadWillBegin e) {
log.debug("Download will begin with suggested file name \"{}\" (url: \"{}\", frameId: {}, guid: {})",
handler.getSuggestedFilename(), handler.getUrl(), handler.getFrameId(), handler.getGuid());
fileName.set(handler.getSuggestedFilename());
});

devTools.addListener(
Browser.downloadProgress(),
e -> {
if (e.getState() == CANCELED) {
String message = "File download is %s (received bytes: %s, total bytes: %s, guid: %s)".formatted(
e.getState(), e.getReceivedBytes(), e.getTotalBytes(), e.getGuid());
throw new FileNotDownloadedError(driver, message, timeout);
}
downloadComplete.set(e.getState() == COMPLETED);
log.debug("Download is {} (received bytes: {}, total bytes: {}, guid: {})",
e.getSuggestedFilename(), e.getUrl(), e.getFrameId(), e.getGuid());
fileName.set(e.getSuggestedFilename());
}

@Override
public String toString() {
return getClass().getSimpleName() + "#" + id;
}
}

private record DownloadProgressListener(long id, Driver driver, AtomicBoolean downloadComplete, long timeout)
implements Consumer<DownloadProgress> {
@Override
public void accept(DownloadProgress e) {
if (e.getState() == CANCELED) {
String message = "File download is %s (received bytes: %s, total bytes: %s, guid: %s)".formatted(
e.getState(), e.getReceivedBytes(), e.getTotalBytes(), e.getGuid());
});
throw new FileNotDownloadedError(driver, message, timeout);
}
downloadComplete.set(e.getState() == COMPLETED);
log.debug("Download is {} (received bytes: {}, total bytes: {}, guid: {})",
e.getState(), e.getReceivedBytes(), e.getTotalBytes(), e.getGuid());
}

@Override
public String toString() {
return getClass().getSimpleName() + "#" + id;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
import static com.codeborne.selenide.WebDriverRunner.isEdge;
import static com.codeborne.selenide.WebDriverRunner.isFirefox;
import static com.codeborne.selenide.files.DownloadActions.clickAndConfirm;
import static com.codeborne.selenide.files.FileFilters.*;
import static com.codeborne.selenide.files.FileFilters.withExtension;
import static com.codeborne.selenide.files.FileFilters.withName;
import static com.codeborne.selenide.files.FileFilters.withNameMatching;
import static java.nio.file.Files.createTempDirectory;
import static java.time.Duration.ofMillis;
import static java.time.Duration.ofSeconds;
Expand Down

0 comments on commit d03c21d

Please sign in to comment.