如何在Alpine Docker容器上运行Playwright浏览器测试?

iecba09b  于 2023-03-01  发布在  Docker
关注(0)|答案(1)|浏览(317)

Playwright附带的Java驱动程序不适用于Alpine,因为它们不使用静态链接的MUSL构建。

xytpbqjk

xytpbqjk1#

在您的Alpine映像中,从Alpine存储库安装nodejschromium,并设置env变量,告诉Playwright使用它们而不是自己的驱动程序:

echo "https://dl-cdn.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories \
    && echo "https://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
    && echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
    && echo "https://dl-cdn.alpinelinux.org/alpine/v3.16/main" >> /etc/apk/repositories \
    && echo "https://dl-cdn.alpinelinux.org/alpine/v3.16/community" \
    && apk upgrade -U -a \
    && apk add \
    libstdc++ \
    chromium \
    harfbuzz \
    nss \
    freetype \
    ttf-freefont \
    font-noto-emoji \
    wqy-zenhei \
    nodejs \
    && rm -rf /var/cache/* \
    && mkdir /var/cache/apk

export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
export PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium-browser
export PLAYWRIGHT_NODEJS_PATH=/usr/bin/node

然后,在Java或Kotlin代码中,您必须自己处理自定义浏览器位置:

abstract class AbstractBrowserTest(private val headless: Boolean = true) {

    private val playwright: Playwright = Playwright.create()
    private val browser: Browser = launchBrowser()

    private fun launchBrowser(): Browser {
        val env = System.getenv("PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH")
        return if (env != null && env.isNotBlank()) {
            playwright.chromium().launch(LaunchOptions().setHeadless(true).setExecutablePath(Paths.get(env)))
        } else {
            playwright.chromium().launch(LaunchOptions().setHeadless(headless))
        }
    }
}

prop 到https://github.com/fivemru/playwright-docker-alpine的灵感!

相关问题