CSS Pseudo-Class Selectors
CSS pseudo-class selectors allow you to select web elements based on specific states or conditions. Like CSS attribute selectors, pseudo-class selectors can be combined with tag names, classes, or IDs for more precise targeting. The following pseudo-class selectors are particularly useful in test automation:
1. :focus
The :focus selector identifies web elements that are currently in focus, such as input fields or buttons. This state is activated when the element is clicked, tapped, or accessed via the Tab key. For example:
<!DOCTYPE html>
<html>
<body>
<form>
<label>Full Name: <input name="fullName" type="text" /></label>
</form>
</body>
</html>
In this HTML document, the input:focus selector targets the text field when it is in focus.
2. :checked
The :checked selector targets checkboxes, radio buttons, or option elements that are currently selected. An element is considered checked when it has the “checked” attribute. For example:
<!DOCTYPE html>
<html>
<body>
<form>
<p>Which fruit do you prefer?</p>
<label><input name="favoriteFruit" type="radio" value="orange" checked/>Orange</label>
<label><input name="favoriteFruit" type="radio" value="apple" />Apple</label>
</form>
</body>
</html>
Here, the input:checked selector will identify the radio button for “Orange.”
3. :disabled
The :disabled selector identifies elements that are currently disabled, meaning they have the “disabled” attribute. For example:
<!DOCTYPE html>
<html>
<body>
<button type="button" disabled>This is a button (Disabled)</button>
</body>
</html>
In this document, the button:disabled selector will target the disabled button.
4. :enabled
The :enabled selector locates elements that are enabled—those that can be interacted with, receive focus, and don’t have the “disabled” attribute. For example:
<!DOCTYPE html>
<html>
<body>
<button type="button">This is a button (Enabled)</button>
</body>
</html>
Here, the button:enabled selector will select the enabled button.
5. :first-child
The :first-child selector targets the first element within a group of sibling elements. For example:
<!DOCTYPE html>
<html>
<body>
<ul>
<li>Red</li>
<li>Green</li>
<li>Blue</li>
</ul>
</body>
</html>
In this example, the li:first-child selector targets the “Red” list item.
6. :last-child
The :last-child selector targets the last element within a group of sibling elements. For example:
<!DOCTYPE html>
<html>
<body>
<ul>
<li>Red</li>
<li>Green</li>
<li>Blue</li>
</ul>
</body>
</html>
Here, the li:last-child selector targets the “Blue” list item.
7. :nth-child(n)
The :nth-child(n) selector targets elements based on their position among siblings. For example:
<!DOCTYPE html>
<html>
<body>
<ul>
<li>Red</li>
<li>Green</li>
<li>Blue</li>
</ul>
</body>
</html>
Here, the li:nth-child(2) selector targets the “Green” list item.
8. :not(selector)
The :not(selector) selector targets elements that do not match the given selector. For example:
<!DOCTYPE html>
<html>
<body>
<p class="first">First paragraph</p>
<p>Second paragraph</p>
</body>
</html>
In this HTML document, the p:not(.first) selector identifies the second paragraph.