selenium-java — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited selenium-java (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are an expert in Selenium WebDriver using Java, specializing in building scalable, maintainable, and high-performance automated test frameworks for modern web applications.
This skill is optimized for enterprise-grade automation, CI/CD integration, and long-term maintainability.
src
└── test
├── java
│ ├── base
│ │ ├── BaseTest.java
│ │ └── BasePage.java
│ ├── pages
│ │ ├── LoginPage.java
│ │ └── DashboardPage.java
│ ├── tests
│ │ ├── LoginTests.java
│ │ └── DashboardTests.java
│ └── utils
│ ├── DriverFactory.java
│ ├── WaitUtils.java
│ └── ConfigReader.java
└── resources
├── config.properties
└── testng.xmlThis structure scales cleanly from 10 tests to 10,000 tests without entropy.
package utils;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class DriverFactory {
private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();
public static void initDriver(boolean headless) {
ChromeOptions options = new ChromeOptions();
if (headless) {
options.addArguments("--headless=new");
}
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--no-sandbox");
WebDriverManager.chromedriver().setup();
driver.set(new ChromeDriver(options));
}
public static WebDriver getDriver() {
return driver.get();
}
public static void quitDriver() {
driver.get().quit();
driver.remove();
}
}ThreadLocal enables true parallel execution, not simulated concurrency.
package base;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import utils.DriverFactory;
public class BaseTest {
protected WebDriver driver;
@BeforeMethod
public void setUp() {
DriverFactory.initDriver(true);
driver = DriverFactory.getDriver();
driver.manage().window().maximize();
}
@AfterMethod
public void tearDown() {
DriverFactory.quitDriver();
}
}
package base;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.time.Duration;
public class BasePage {
protected WebDriver driver;
protected WebDriverWait wait;
public BasePage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
protected void click(By locator) {
wait.until(ExpectedConditions.elementToBeClickable(locator)).click();
}
protected void type(By locator, String text) {
wait.until(ExpectedConditions.visibilityOfElementLocated(locator))
.sendKeys(text);
}
protected String getText(By locator) {
return wait.until(ExpectedConditions.visibilityOfElementLocated(locator))
.getText();
}
}package pages;
import base.BasePage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage extends BasePage {
private By usernameInput = By.id("username");
private By passwordInput = By.id("password");
private By loginButton = By.cssSelector("button[type='submit']");
private By errorMessage = By.className("error-message");
public LoginPage(WebDriver driver) {
super(driver);
}
public void login(String username, String password) {
type(usernameInput, username);
type(passwordInput, password);
click(loginButton);
}
public String getErrorMessage() {
return getText(errorMessage);
}
}Priority order:
By.cssSelector("[data-testid='submit-button']");
By.xpath("//label[text()='Email']/following-sibling::input"); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("modal"))); Wait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(15))
.pollingEvery(Duration.ofMillis(500))
.ignoring(NoSuchElementException.class);Hard sleeps are automation debt—never amortize them.
package tests;
import base.BaseTest;
import org.testng.Assert;
import org.testng.annotations.Test;
import pages.LoginPage;
public class LoginTests extends BaseTest {
@Test
public void loginWithValidCredentialsNavigatesToDashboard() {
driver.get("https://example.com/login");
LoginPage loginPage = new LoginPage(driver);
loginPage.login("valid_user", "valid_pass");
Assert.assertTrue(driver.getCurrentUrl().contains("dashboard"));
}
@Test
public void loginWithInvalidPasswordShowsError() {
driver.get("https://example.com/login");
LoginPage loginPage = new LoginPage(driver);
loginPage.login("valid_user", "wrong_pass");
Assert.assertTrue(loginPage.getErrorMessage()
.contains("Invalid credentials"));
}
} Select select = new Select(driver.findElement(By.id("country")));
select.selectByVisibleText("Germany"); driver.switchTo().alert().accept(); driver.switchTo().frame("frameName");
driver.switchTo().defaultContent(); String parent = driver.getWindowHandle();
for(String window : driver.getWindowHandles()){
if(!window.equals(parent)){
driver.switchTo().window(window);
break;
}
} <suite name="Automation Suite" parallel="tests" thread-count="5">
<test name="Login Tests">
<classes>
<class name="tests.LoginTests"/>
</classes>
</test>
</suite>Designed for seamless scaling into Selenium Grid or cloud providers.
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.x.x</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</dependency>
</dependencies>~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.