企业Jenkins服务器Playwright Java联调BrowserStack报错排查
Jenkins运行BrowserStack Playwright Java代码报错解决方案
问题详情
在企业自有Jenkins服务器上构建通过BrowserStack运行Chromium的Playwright Java代码时,出现以下报错:
java.lang.RuntimeException: Failed to create driver Caused by: java.lang.RuntimeException: Failed to install browsers, exit code: 1
相关核心代码:
import com.google.gson.JsonObject; import com.microsoft.playwright.*; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class LaunchBrowserInBrowserStack { final String BROWSERSTACK_USERNAME = "myusername"; final String BROWSERSTACK_ACCESS_KEY = "myaccesskey"; Playwright playwright; Browser browser; @BeforeClass public void setUp() throws UnsupportedEncodingException { JsonObject capabilitiesObject = new JsonObject(); capabilitiesObject.addProperty("browser", "chrome"); capabilitiesObject.addProperty("browser_version", "latest"); capabilitiesObject.addProperty("os", "windows"); capabilitiesObject.addProperty("os_version", "10"); capabilitiesObject.addProperty("name", "Playwright in browserstack"); capabilitiesObject.addProperty("build", "playwright-java-5"); capabilitiesObject.addProperty("project", "APP Automation Project"); capabilitiesObject.addProperty("browserstack.username", BROWSERSTACK_USERNAME); capabilitiesObject.addProperty("browserstack.accessKey", BROWSERSTACK_ACCESS_KEY); playwright = Playwright.create(); BrowserType chromium = playwright.chromium(); String caps = URLEncoder.encode(capabilitiesObject.toString(), "utf-8"); String ws_endpoint = "wss://cdp.browserstack.com/playwright?caps=" + caps; browser = chromium.connect(ws_endpoint); } }
使用的构建命令:
mvn clean test -Dmaven.test.failure.ignore=true -Dsurefire.suiteXmlFiles=TestSuites/DemoTestPlan.xml
尝试安装Chromium时出现系统依赖不兼容错误:
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install chromium" /tmp/playwright-java-7544179260710857064/node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /tmp/playwright-java-7544179260710857064/node) /tmp/playwright-java-7544179260710857064/node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by /tmp/playwright-java-7544179260710857064/node) /tmp/playwright-java-7544179260710857064/node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /tmp/playwright-java-7544179260710857064/node) /tmp/playwright-java-7544179260710857064/node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /tmp/playwright-java-7544179260710857064/node) /tmp/playwright-java-7544179260710857064/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /tmp/playwright-java-7544179260710857064/node) /tmp/playwright-java-7544179260710857064/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /tmp/playwright-java-7544179260710857064/node)
关键结论:安装Chromium无法解决问题
你是通过WebSocket连接BrowserStack云端运行浏览器,本地Jenkins服务器不需要安装任何浏览器。Playwright报错是因为默认会自动尝试安装本地浏览器,但这一步完全多余,反而因服务器系统依赖不足导致失败。
解决方案
1. 禁用Playwright自动安装浏览器(优先推荐)
修改代码中创建Playwright实例的逻辑,添加skipInstallBrowsers配置跳过浏览器安装:
playwright = Playwright.create(new Playwright.CreateOptions().setSkipInstallBrowsers(true));
这样启动Playwright时不会触发本地浏览器安装流程,直接连接BrowserStack云端浏览器即可,从根源解决报错。
2. 若后续需本地运行浏览器,解决系统依赖问题
如果之后有在Jenkins本地运行Playwright浏览器的需求,可通过以下方式解决GLIBC依赖问题:
- 使用Docker容器构建:采用Playwright官方提供的预配置镜像(如
mcr.microsoft.com/playwright/java:v1.40.0-jammy),在Jenkins中通过Docker执行构建命令,容器内已预装所有依赖,避开服务器系统限制。 - 升级系统依赖(谨慎操作):联系运维升级服务器的GLIBC和libstdc++版本,但企业服务器通常有稳定性要求,此方法需评估风险。
- 替换兼容版Node.js:手动下载适配服务器GLIBC版本的Node.js,替换Playwright临时目录中的Node执行文件,此方法操作繁琐,仅作为备选。
内容的提问来源于stack exchange,提问作者Sameera De Silva
相关产品推荐
相关产品推荐

