|
|
|
|
|
|
|
|
|
import { test, expect } from '@playwright/test'; |
|
|
|
test('The The-internet E2E Test', async ({ page }) => { |
|
|
|
await page.setViewportSize({ width: 1280, height: 800 }); |
|
|
|
|
|
async function safeClick(selector, description) { |
|
console.log(`Attempting to click ${description}...`); |
|
try { |
|
|
|
const element = page.locator(selector); |
|
const isVisible = await element.isVisible().catch(() => false); |
|
|
|
if (!isVisible) { |
|
console.log(`Element ${description} is not visible, skipping`); |
|
return false; |
|
} |
|
|
|
|
|
await element.scrollIntoViewIfNeeded(); |
|
await page.waitForTimeout(500); |
|
|
|
|
|
await element.click(); |
|
console.log(`Successfully clicked ${description}`); |
|
await page.waitForTimeout(1000); |
|
return true; |
|
} catch (e) { |
|
console.log(`Could not click ${description}: ${e.message}`); |
|
return false; |
|
} |
|
} |
|
|
|
|
|
console.log('Navigating to application...'); |
|
await page.goto('https://the-internet.herokuapp.com/login'); |
|
|
|
|
|
await expect(page).toHaveTitle(/^The.*$/); |
|
|
|
|
|
console.log('Performing login...'); |
|
await page.fill("input[type='text'][name*='user']", "tomsmith"); |
|
await page.fill("input[type='password']", "SuperSecretPassword!"); |
|
|
|
await safeClick("button[type='submit']", "login button"); |
|
|
|
|
|
await page.waitForTimeout(2000); |
|
try { |
|
|
|
|
|
const currentUrl = page.url(); |
|
console.log('Post-login URL: ' + currentUrl); |
|
|
|
const pageContent = await page.content(); |
|
const loggedInIndicators = ['welcome', 'logged in', 'sign out', 'logout', 'account']; |
|
let foundIndicator = false; |
|
for (const indicator of loggedInIndicators) { |
|
if (pageContent.toLowerCase().includes(indicator)) { |
|
foundIndicator = true; |
|
console.log('Found login success indicator: ' + indicator); |
|
break; |
|
} |
|
} |
|
|
|
if (foundIndicator) { |
|
expect(true).toBeTruthy(); |
|
} else { |
|
console.log('Warning: Could not find clear login success indicators'); |
|
} |
|
} catch (e) { |
|
console.log('Error checking login status: ' + e); |
|
} |
|
|
|
|
|
console.log('Exploring application navigation...'); |
|
|
|
await safeClick("form#login > button", "Login"); |
|
|
|
|
|
await safeClick("div#page-footer > div > div > a", "Elemental Selenium"); |
|
|
|
|
|
await page.screenshot({ path: 'test-result-screenshot.png' }); |
|
}); |