Core TypeScript Principles
Playwright is uniquely tailored for TypeScript. To write robust automation scripts, you need to master these core concepts.
1. Simple Types (Primitives)
Primitives like string, number, and boolean. You can define them explicitly or let TS infer them.
typescript
// Explicit Type Declaration
let username: string = "AdminUser";
let maxRetries: number = 3;
let isLoggedIn: boolean = true;
// Type Inference (Recommended)
let defaultTimeout = 5000; // TS knows this is a number!
2. Conditionals (if/else)
Conditionals are used to make decisions in your automation scripts, such as checking if a specific element exists before clicking it.
typescript
const userRole = "admin";
if (userRole === "admin") {
console.log("Navigating to Admin Dashboard");
} else if (userRole === "editor") {
console.log("Navigating to Editor Panel");
} else {
console.log("Navigating to User Profile");
}
3. Loops (for & while)
Loops are essential for Data-Driven Testing (e.g., iterating over multiple users or extracting text from a list of elements).
typescript
console.log("--- Standard For Loop ---");
for (let i = 1; i <= 3; i++) {
console.log(Running Test Iteration: ${i});
}
console.log("--- For...of Loop (Arrays) ---");
const testUsers = ["alice@test.com", "bob@test.com"];
for (const user of testUsers) {
console.log(Logging in with: ${user});
}
4. Arrays and Objects
Arrays hold lists of data, and Objects store key-value pairs.
typescript
// Array of strings
const usernames: string[] = ["admin", "guest", "testUser"];
// Object definition
const testConfig = {
headless: true,
browser: "chromium",
timeout: 30000
};
console.log(Selected browser is ${testConfig.browser} with timeout ${testConfig.timeout}ms);
5. Tuples & Enums
Tuples** are fixed-length arrays. **Enums are named constants, perfect for defining environments or roles.
typescript
// Tuple: [x, y] coordinates
const mousePosition: [number, number] = [100, 250];
// Enum: Strict options
enum Env { QA, PROD }
let currentEnv: Env = Env.QA;
if (currentEnv === Env.QA) {
console.log("Testing on QA environment");
}