How
How Alumnium Works
Connect Alumnium to a coding agent through MCP, or add its Java, Python, or TypeScript client to the automated tests you already have.
Agents
Engineers
I. Install
Agents
Engineers
Add an MCP Server
Install Alumnium binary using a installation script or a package manager.
Install a Client Library
Install the Alumnium client for Java, Python, or TypeScript.
curl -LsSf https://alumnium.ai/install.sh | shirm https://alumnium.ai/install.ps1 | iexnpm install alumniumpnpm add alumniumyarn add alumniumbun add alumniumpip install alumniumuv tool install alumniumnpm install alumniumpnpm add alumniumyarn add alumniumbun add alumniumpip install alumniumuv add alumniumdependencies {
testImplementation 'ai.alumnium:alumnium:0.23.1'
testRuntimeOnly 'ai.alumnium:alumnium-cli-darwin-arm64:0.23.1'
// Add other platforms as needed
}<dependencies>
<dependency>
<groupId>ai.alumnium</groupId>
<artifactId>alumnium</artifactId>
<version>0.23.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ai.alumnium</groupId>
<artifactId>alumnium-cli-darwin-arm64</artifactId>
<version>0.23.1</version>
<scope>test</scope>
</dependency>
<!-- Add other platforms as needed -->
</dependencies>II. Set Up
Agents
Engineers
Set Up the MCP Server
Choose a supported AI provider, configure its credentials when required, and connect Alumnium to your MCP-compatible coding agent.
Set Up the Client Library
Choose a supported AI provider, then initialize Alumnium with your existing Selenium, Playwright, or Appium driver.
claude mcp add alumnium \
--env ALUMNIUM_MODEL=anthropic \
--env ANTHROPIC_API_KEY=... -- \
alumnium mcpcodex mcp add alumnium \
--env ALUMNIUM_MODEL=codex -- \
alumnium mcpgrok mcp add alumnium \
--env ALUMNIUM_MODEL=xai \
--env XAI_API_KEY=... -- \
alumnium mcpimport { strict as assert } from "assert";
import { Alumni } from "alumnium";
import { Builder, type WebDriver } from "selenium-webdriver";
process.env.OPENAI_API_KEY = "...";
describe("YouTube Search", () => {
let al: Alumni;
let driver: WebDriver;
before(async () => {
driver = await new Builder().forBrowser("chrome").build();
al = new Alumni(driver);
});
after(async () => {
await driver.quit();
await al.quit();
});
});import { Alumni } from "alumnium";
import { test, expect } from "@playwright/test";
process.env.OPENAI_API_KEY = "...";
test.describe("YouTube Search", async () => {
let al: Alumni;
test.beforeEach(async ({ page }) => {
al = new Alumni(page);
});
test.afterEach(async () => {
await al.quit();
});
});import { Alumni } from "alumnium";
import { browser, expect } from "@wdio/globals";
process.env.OPENAI_API_KEY = "...";
describe("YouTube Search", () => {
let al: Alumni;
before(async () => {
al = new Alumni(browser);
});
after(async () => {
await al.quit();
});
});from alumnium import Alumni
from selenium.webdriver import Chrome
from pytest import fixture
@fixture
def driver():
driver = Chrome()
yield driver
driver.quit()
@fixture
def al(driver):
al = Alumni(driver)
yield al
al.quit()from alumnium import Alumni
from pytest import fixture
@fixture
def al(page):
al = Alumni(page)
yield al
al.quit()from alumnium import Alumni
from appium.webdriver.webdriver import WebDriver
from pytest import fixture
@fixture
def driver():
driver = WebDriver()
yield driver
driver.quit()
@fixture
def al(driver):
al = Alumni(driver)
yield al
al.quit()import static org.junit.jupiter.api.Assertions.assertEquals;
import ai.alumnium.Alumni;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeDriver;
class SearchTest {
private Alumni al;
private ChromeDriver driver;
@BeforeEach
void setUp() {
driver = new ChromeDriver();
al = new Alumni(driver);
}
@AfterEach
void tearDown() {
driver.quit();
al.quit();
}
}import static org.junit.jupiter.api.Assertions.assertEquals;
import ai.alumnium.Alumni;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.junit.UsePlaywright;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@UsePlaywright
class SearchTest {
private Alumni al;
@BeforeEach
void setUp(Page page) {
al = new Alumni(page);
}
@AfterEach
void tearDown() {
al.quit();
}
}import static org.junit.jupiter.api.Assertions.assertEquals;
import ai.alumnium.Alumni;
import io.appium.java_client.ios.IOSDriver;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class SearchTest {
private Alumni al;
private IOSDriver driver;
@BeforeEach
void setUp() throws Exception {
driver = new IOSDriver(/* pass options as needed */);
al = new Alumni(driver);
}
@AfterEach
void tearDown() {
driver.quit();
al.quit();
}
}III. Test
Agents
Engineers
Prompt to Test
Describe the user flow and expected result in plain language. Your coding agent uses Alumnium to drive and verify the application.
Write Test Steps
Add natural-language actions, checks, and data retrievals alongside the framework code already in your tests.
describe("YouTube Search", () => {
it("queries videos", async () => {
await driver.get("https://youtube.com");
await al.do("search for 'lofi beats' and press Enter");
await al.check("page title contains 'lofi beats'");
await al.check("search results contain lofi videos");
});
});test.describe("YouTube Search", async () => {
test("queries videos", async ({ page }) => {
await page.goto("https://youtube.com");
await al.do("search for 'lofi beats' and press Enter");
await al.check("page title contains 'lofi beats'");
await al.check("search results contain lofi videos");
});
});describe("YouTube Search", () => {
it("queries videos", async () => {
await browser.url("https://youtube.com");
await al.do("search for 'lofi beats' and press Enter");
await al.check("page title contains 'lofi beats'");
await al.check("search results contain lofi videos");
});
});def test_search(al, driver):
driver.get("https://youtube.com")
al.do("search for 'lofi beats' and press Enter")
al.check("page title contains 'lofi beats'")
al.check("search results contain lofi videos")def test_search(al, page):
page.goto("https://youtube.com")
al.do("search for 'lofi beats' and press Enter")
al.check("page title contains 'lofi beats'")
al.check("search results contain lofi videos")def test_search(al, driver):
driver.get("https://youtube.com")
al.do("search for 'lofi beats' and press Enter")
al.check("page title contains 'lofi beats'")
al.check("search results contain lofi videos")class YouTubeSearchTest {
@Test
void queriesVideos() {
driver.get("https://youtube.com");
al.act("search for 'lofi beats' and press Enter");
al.check("page title contains 'lofi beats'");
al.check("search results contain lofi videos");
}
}class YouTubeSearchTest {
@Test
void queriesVideos() {
page.navigate("https://youtube.com");
al.act("search for 'lofi beats' and press Enter");
al.check("page title contains 'lofi beats'");
al.check("search results contain lofi videos");
}
}class YouTubeSearchTest {
@Test
void queriesVideos() {
driver.get("https://youtube.com");
al.act("search for 'lofi beats' and press Enter");
al.check("page title contains 'lofi beats'");
al.check("search results contain lofi videos");
}
}IV. Run
Agents
Engineers
Run Markdown Tests
Ask your coding agent to save a successful scenario as Markdown. Run it again locally or in CI with Alumnium test runner.
Run Test Suite
Run your test suite as usual, with Alumnium handling natural-language steps and checks.
