🎭 Playwright for Java
Playwright is a Java library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.
Esta es una versión modificada (fork) de Playwright-Java diseñada para ser completamente thread-safe. Permite levantar una única ventana del navegador (Browser) y abrir múltiples pestañas (BrowserContext / Page) de forma concurrente desde diferentes hilos sin que ocurran corrupciones de conexión ni los errores Object doesn't exist o fallos en __adopt__.
Connection.java: Sincronización en la lectura y procesamiento de los mensajes del WebSocket (processOneMessage()) para asegurar el orden secuencial del protocolo. Los mapas de objetos y callbacks se migraron aConcurrentHashMap, y los generadores de IDs pasaron a serAtomicInteger.WaitableResult.java: Se añadieron modificadoresvolatilea variables clave de estado para garantizar la visibilidad inmediata en memoria entre hilos.ChannelOwner.java: Sincronización en la adopción y liberación de canales (adopt(),disposeChannelOwner()) y migración aConcurrentHashMap.ListenerCollection.java: Modificado aConcurrentHashMapconCopyOnWriteArrayListinterno para evitar excepciones de modificación concurrente al registrar o remover listeners mientras se disparan eventos.
Puedes validar los tests de seguridad de hilos usando el script integrado:
./verify.shAgrega la dependencia apuntando a este repositorio de GitHub:
repositories {
maven { url = uri("https://jitpack.io") }
mavenCentral()
}
dependencies {
// Reemplaza HASH_DEL_COMMIT con el commit de tu publicación
implementation("com.github.lxluxo23:playwright-java:HASH_DEL_COMMIT")
}<repositories>
<repository>
<id>jitpack</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.lxluxo23</groupId>
<artifactId>playwright-java</artifactId>
<version>HASH_DEL_COMMIT</version>
</dependency>| Linux | macOS | Windows | |
|---|---|---|---|
| Chromium 149.0.7827.55 | ✅ | ✅ | ✅ |
| WebKit 26.5 | ✅ | ✅ | ✅ |
| Firefox 151.0 | ✅ | ✅ | ✅ |
https://playwright.dev/java/docs/intro
https://playwright.dev/java/docs/api/class-playwright
This code snippet navigates to Playwright homepage in Chromium, Firefox and WebKit, and saves 3 screenshots.
import com.microsoft.playwright.*;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
public class PageScreenshot {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
List<BrowserType> browserTypes = Arrays.asList(
playwright.chromium(),
playwright.webkit(),
playwright.firefox()
);
for (BrowserType browserType : browserTypes) {
try (Browser browser = browserType.launch()) {
BrowserContext context = browser.newContext();
Page page = context.newPage();
page.navigate("https://playwright.dev/");
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("screenshot-" + browserType.name() + ".png")));
}
}
}
}
}More comfortable in another programming language? Playwright is also available in