Lab Manual - Exp 10 (STA)
Lab Manual - Exp 10 (STA)
Theory:-
Key Challenges:
2. Framework Architecture
A. Component Diagram
┌─────────────────┐ ┌──────────────────┐
┌─────────────────────┐
│ Test Script │ ──> │ WebDriver Manager│ ──> │ Browser Executables │
└─────────────────┘ └──────────────────┘
└─────────────────────┘
│ ▲
▼ │
┌─────────────────┐ ┌──────────────────┐
┌─────────────────────┐
│ Test Execution │ ──> │ Browser Instance │ ──> │ Web Application │
└─────────────────┘ └──────────────────┘
└─────────────────────┘
B. Workflow
Initialization: WebDriver Manager downloads/installs correct browser drivers
Session Creation: Spawns browser instances with configured options
Test Execution: Runs defined test scenarios
Validation: Checks browser-specific behaviors
Reporting: Captures screenshots and test results
Cleanup: Safely terminates browser sessions
B. Cross-Browser Strategy
Approach Implementation Use Case
Sequential Loop through browsers Development debugging
Parallel ThreadPoolExecutor CI/CD pipelines
Cloud Browserstack/SauceLabs integration Enterprise testing
def run_test(browser_name):
"""Run a simple test on different browsers"""
results = []
driver = None
try:
if browser_name.lower() == "chrome":
options = ChromeOptions()
options.add_argument("--start-maximized")
# New service-based initialization
driver =
webdriver.Chrome(service=webdriver.chrome.service.Service(ChromeDriverMana
ger().install()),
options=options)
else:
return pd.DataFrame({"Browser": [browser_name], "Status":
["Unsupported"], "Screenshot": [None]})
# Test steps
driver.get("https://www.demoblaze.com")
title_contains_store = "STORE" in driver.title
screenshot = f"{browser_name}_screenshot.png"
driver.save_screenshot(screenshot)
results.append({
"Browser": browser_name,
"Page Title Correct": title_contains_store,
"Screenshot": screenshot,
"Status": "PASS" if title_contains_store else "FAIL"
})
except Exception as e:
results.append({
"Browser": browser_name,
"Status": f"ERROR: {str(e)}",
"Screenshot": None
})
finally:
if driver:
driver.quit()
return pd.DataFrame(results)
Mobile Testing
def run_mobile_test(device_name):
chrome_options = Options()
chrome_options.add_experimental_option(
"mobileEmulation",
{"deviceName": device_name}
)
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options
)
try:
driver.get("https://www.demoblaze.com")
screenshot = f"{device_name.replace(' ', '_')}_mobile.png"
driver.save_screenshot(screenshot)
return {
"Device": device_name,
"Viewport": driver.get_window_size(),
"Screenshot": screenshot
}
finally:
driver.quit()
pd.DataFrame(mobile_results)