Visitar URL original
GitHub - lxluxo23/playwright-java: Java version of the Playwright testing and automation library · GitHub
Skip to content

About

Java version of the Playwright testing and automation library

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

🎭 Playwright for Java

javadoc maven version Join Discord

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.


🚀 Thread-Safe Fork (lxluxo23/playwright-java)

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__.

Mejoras de Concurrencia Aplicadas al Core:

  • 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 a ConcurrentHashMap, y los generadores de IDs pasaron a ser AtomicInteger.
  • WaitableResult.java: Se añadieron modificadores volatile a 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 a ConcurrentHashMap.
  • ListenerCollection.java: Modificado a ConcurrentHashMap con CopyOnWriteArrayList interno para evitar excepciones de modificación concurrente al registrar o remover listeners mientras se disparan eventos.

Cómo verificar localmente:

Puedes validar los tests de seguridad de hilos usando el script integrado:

./verify.sh

Cómo consumirlo en tus proyectos (vía JitPack):

Agrega la dependencia apuntando a este repositorio de GitHub:

Gradle (build.gradle.kts)

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")
}

Maven (pom.xml)

<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>

Documentation

Linux macOS Windows
Chromium 149.0.7827.55 ✅ ✅ ✅
WebKit 26.5 ✅ ✅ ✅
Firefox 151.0 ✅ ✅ ✅

https://playwright.dev/java/docs/intro

API Reference

https://playwright.dev/java/docs/api/class-playwright

Example

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")));
        }
      }
    }
  }
}

Other languages

More comfortable in another programming language? Playwright is also available in

About

Java version of the Playwright testing and automation library

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages