Skip to main content

HTML vs CSS vs JavaScript

html-vs-css-vs-javascript

HTML Basics for Testing

  • HTML (HyperText Markup Language) is the structure of web pages. Testers need to understand how elements are organized to locate them for functional testing. ie: Selenium or Cypress.

Key HTML Elements for Testing

Tags

<div></div>
<span></span>
<input />
<button></button>

Attributes

  • id - A unique identifier for an element.
<div id="header"></div>
  • class - A reusable CSS class.
<button class="btn-primary"></button>
  • name - Often used with forms.
<input name="username" />

data - Custom attribute name used for testing.

<div data-test-id="menu-item"></div>

Example

<form id="loginForm">
<input type="text" name="username" id="username" />
<input type="password" name="password" id="password" />
<button type="submit">Login</button>
</form>
Testing Tips

Use id and data attributes to create more stable selectors.

Why use id attributes

  • Uniqueness - id values are supposed to be unique in the DOM, which makes them reliable selectors for identifying specific elements.

  • Performance - Browsers and testing tools can locate elements by id faster than by complex CSS or XPath selectors.

  • Clarity - An id="submit-button" clearly indicates the purpose of the element, improving test readability.

Why use data attributes

  • Custom and Descriptive - You can define attributes like data-testid="login-button" without affecting layout or functionality.

  • Decoupled from CSS - These attributes aren't typically used for styling or behavior, so changes in UI/UX are less likely to break them.

  • Safe from Refactors - Designers might change class names or layout frequently. data attributes stay unchanged unless intentionally modified.

  • Semantic Free - You're not mixing visual (CSS classes) or behavioral (JS events) semantics with testing logic.

What to avoid

  • Class-based selectors - ie: .btn.btn-primary because they often change with design tweaks.

  • Text-based selectors - ie: contains('Submit') because the text may change due to localization or copy updates.

  • Deep or brittle selectors - ie: div > ul > li:nth-child(2) as any structure change breaks the test.

Example

<!-- Good -->
<button id="submitBtn" data-testid="submit-button">Submit</button>

<!-- In your test -->
cy.get('#submitBtn').click(); // Fast and unique
cy.get('[data-testid="submit-button"]').click(); // Stable across UI changes

<!-- Bad -->
cy.get('.btn.btn-primary').click(); // Might break if styling changes

CSS Basics for Testing

  • CSS (Cascading Style Sheets) handles the styling of web pages. While it doesn’t directly affect functionality, testers should know how it impacts the list below.

    • Element visibility (display: none, visibility: hidden).

    • Layout bugs (margin, padding, positioning).

    • States (hover, active, focus).

CSS Selectors Useful for Testing

  • ID selector - #header targets elements with id="header".

  • Class selector - .btn-primary targets elements with class="btn-primary".

  • Attribute selector - [type="text"] selects all text inputs.

Example

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Selector Example</title>
<style>
/* ID selector */
#header {
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
}

/* Class selector */
.btn-primary {
background-color: blue;
color: white;
padding: 10px 15px;
}

/* Attribute selector */
[type="text"] {
border: 2px solid gray;
padding: 5px;
}
</style>
</head>
<body>

<!-- ID selector -->
<div id="header">Welcome to Selector Demo</div>

<!-- Class selector -->
<button class="btn-primary">Click Me</button>

<!-- Attribute selector -->
<input type="text" placeholder="Enter your name" />
<input type="password" placeholder="Enter your password" />

</body>
</html>
Testing Tips

CSS affects dynamic visibility. Make sure to test for hidden elements, hover states, and responsive layouts.

JavaScript Basics for Testing

  • JavaScript (JS) provides interactivity in web applications. Understanding JS is essential for testing dynamic content, form validation, and user interactions.

Common JS Concepts for Testers

  • DOM Manipulation - JS can add or remove HTML elements dynamically.

  • Event Listeners - Actions like click, submit, and input are registered to elements.

  • Validation and Alerts - JS handles client-side validation and user feedback. ie: alert().

  • APIs and Asynchronous JavaScript - JS fetches data asynchronously, so testers need to validate both API calls and their UI responses.

Example

// Event Listeners
document.getElementById("todosForm").addEventListener("submit", (e) => {
e.preventDefault(); // Prevents page reload

// Asynchronous JavaScript
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then((response) => response.json())
.then((json) => console.log(json));

// Client side alert
alert("Todos submitted");
});
Testing Tips

Tools like Selenium and Cypress simulate events, so you need to verify both client-side and server-side interactions.

Client-side using Cypress

cy.get("button#save").click();
cy.contains("Saved successfully").should("be.visible"); // UI confirmation

Server-side using Cypress

cy.intercept("POST", "/api/users").as("createUser");
cy.get('input[name="name"]').type("John Doe");
cy.get("button#submit").click();
cy.wait("@createUser").its("response.statusCode").should("eq", 201);

How Testing Tools Leverage HTML, CSS, JS

  • Selenium / WebDriver - Locates elements by id, class, or XPath.
driver.findElement(By.id("username")).sendKeys("testUser");
  • Cypress - Works well with JS-heavy apps.
cy.get("#loginForm").submit();
  • Testing Dynamic Changes - Verify that elements appear or change when triggered by JS (Layout changes or Asynchronous JavaScript requests).

Understanding HTML, CSS, and JS

  • A solid grasp of these basics will improve your ability to write effective automated and manual test cases for modern web applications.

Key Activites for testers

  • Locate elements accurately with HTML.

  • Identify layout and visibility issues with CSS.

  • Verify dynamic behavior driven by JavaScript.

Module Review

Click to start the definition to term matching quiz
Drag the defintion to the correct term.
Click to start the multiple choice quiz
Choose from the listed options below.

Score: : 0 / 25 [0.00 %]

Question 1 of 25: What does HTML stand for?