java Selenide无法下载文件与Chrome驱动程序111在无头模式

fcy6dtqo  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(169)

我有一个测试,需要从网上下载文件,点击一个按钮。
非无头模式下,测试能够通过。
然而,当我在headless中运行它时,下载文件超时失败。
以下是一些详细信息:

  • selenium 化物版本:5.25.0
  • Chrome驱动程序版本:111.0.5563.64

我的配置:

  • 非无头运行:
Configuration.timeout = 20000;
Configuration.fileDownload = FOLDER;
  • 无头赛跑:
Configuration.headless = true;
Configuration.timeout = 20000;
Configuration.fileDownload = FOLDER;

其他选项是默认的,如下载文件夹build/downloads和其余的。
我的Selenide代码下载文件:

@SneakyThrows
    public String downloadFile() {
        return downloadButton.download(10000, withExtension("pdf")).getAbsolutePath();
    }

按钮元素本身:

<button class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedSecondary" tabindex="0" type="button" test-id="download-button">
    <span class="MuiButton-label">Download</span>
    <span class="MuiTouchRipple-root"></span>
</button>

日志:

  • 非无头:
13:20:09.959 INFO com.codeborne.selenide.impl.DownloadFileToFolder - Downloaded 1 files:
  #1  {root}\build\downloads\1678792759151_10256_1\109fc116-cc8b-42ba-9d7b-20733276bf64.pdf
  • 无头:
13:07:19.760 INFO com.codeborne.selenide.impl.DownloadFileToFolder - Downloaded 0 files:
13:07:19.778 INFO com.codeborne.selenide.impl.WindowsCloser - File has been opened in a new window, let's close 1 new windows
13:07:19.778 INFO com.codeborne.selenide.impl.WindowsCloser - Let's close B0C0F608D49BC5C008986B2B7AB210C5

我已经尝试了类似主题中描述的所有解决方案,添加了很多不同的chrome选项组合,但没有运气。
任何帮助感激不尽!

8ehkhllq

8ehkhllq1#

好吧,我找到了一个理由。
最近Chromium驱动程序更改了其无头模式配置。
您可以在此答案中找到更多详细信息:https://stackoverflow.com/a/73840130/11830541
正是我的问题是,我使用旧的Selenide版本,使用传统的--headless参数,而创建无头选项,但它必须是--headless-new自Chrome 109。
为了使这个工作与旧版本的Selenide我使用了这样的变通方案:

ChromeOptions options = new ChromeOptions();

options.addArguments("--headless=new");
options.addArguments("--disable-gpu");
options.addArguments("--disable-background-networking");
options.addArguments("--enable-features=NetworkService,NetworkServiceInProcess");
options.addArguments("--disable-background-timer-throttling");
options.addArguments("--disable-backgrounding-occluded-windows");
options.addArguments("--disable-breakpad");
options.addArguments("--disable-client-side-phishing-detection");
options.addArguments("--disable-component-extensions-with-background-pages");
options.addArguments("--disable-default-apps");
options.addArguments("--disable-features=TranslateUI,ChromePDF");
options.addArguments("--disable-hang-monitor");
options.addArguments("--disable-ipc-flooding-protection");
options.addArguments("--disable-popup-blocking");
options.addArguments("--disable-prompt-on-repost");
options.addArguments("--disable-renderer-backgrounding");
options.addArguments("--disable-sync");
options.addArguments("--force-color-profile=srgb");
options.addArguments("--metrics-recording-only");
options.addArguments("--no-first-run");
options.addArguments("--password-store=basic");
options.addArguments("--use-mock-keychain");
options.addArguments("--hide-scrollbars");
options.addArguments("--mute-audio");

Configuration.browserCapabilities = options;

--headless=new arg中的其他选项与使用Configuration.headless = true;时Selenide添加的选项相同

**注:**最好将Selenide依赖项升级到正确处理此Chromium驱动程序更改的较新版本:https://github.com/selenide/selenide/blob/main/CHANGELOG.md#6120-released-24022023

相关问题