CSS selector syntax in Selenium Java - Build an Automation Script
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.time.Duration; public class CssSelectorTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); try { // Navigate to login page driver.get("https://example.com/login"); // Wait for login button to be clickable using CSS selector WebElement loginButton = wait.until( ExpectedConditions.elementToBeClickable(By.cssSelector("#loginBtn")) ); // Assert login button is displayed if (!loginButton.isDisplayed()) { throw new AssertionError("Login button is not displayed"); } // Click the login button loginButton.click(); // Wait for URL to change to dashboard wait.until(ExpectedConditions.urlToBe("https://example.com/dashboard")); // Assert current URL is dashboard String currentUrl = driver.getCurrentUrl(); if (!"https://example.com/dashboard".equals(currentUrl)) { throw new AssertionError("Expected URL 'https://example.com/dashboard' but got '" + currentUrl + "'"); } System.out.println("Test Passed: Login button clicked and dashboard loaded."); } finally { driver.quit(); } } }
This test script uses Selenium WebDriver with Java to automate the manual test case.
First, it opens the Chrome browser and navigates to the login page URL.
It uses an explicit wait to wait until the login button is clickable, locating it by the CSS selector #loginBtn. This ensures the element is ready for interaction.
Then it asserts the button is displayed on the page to confirm the locator is correct.
Next, it clicks the login button and waits until the URL changes to the expected dashboard URL.
Finally, it asserts the current URL matches the expected dashboard URL to verify successful navigation.
The test prints a success message if all assertions pass and closes the browser in a finally block to ensure cleanup.
Now add data-driven testing with 3 different CSS selectors for login buttons on different pages
Practice
submitBtn?Solution
Step 1: Understand CSS id selector syntax
In CSS, the#symbol is used to select elements by their id attribute.Step 2: Match the selector to the id
The selector#submitBtntargets the element with id="submitBtn" exactly.Final Answer:
#submitBtn -> Option AQuick Check:
Id selector uses # = #submitBtn [OK]
- Using . instead of # for id
- Omitting # and using just the id name
- Using * which selects all elements
active?Solution
Step 1: Recall CSS class selector syntax
Classes are selected using a dot.followed by the class name.Step 2: Identify the correct selector
The selector.activeselects all elements with class="active".Final Answer:
.active -> Option CQuick Check:
Class selector uses . = .active [OK]
- Using # instead of . for class
- Omitting . and using just class name
- Using * which selects all elements
<input type="text" name="username" class="input-field" id="user" />
Which CSS selector will select this input element by its attribute
name?Solution
Step 1: Understand attribute selector syntax
To select elements by attribute, use square brackets with attribute and value:[attr='value'].Step 2: Match the selector to the input element
input[name='username']selects input elements with name="username" exactly.Final Answer:
input[name='username'] -> Option AQuick Check:
Attribute selector uses [attr='value'] = input[name='username'] [OK]
- Missing quotes around attribute value
- Using # for attribute instead of []
- Incorrect syntax like input.class='input-field'
driver.findElement(By.cssSelector("div#main .content > p:first-child"));What is wrong with this selector?
Solution
Step 1: Analyze the selector components
The selector targets apelement that is the first child inside an element with classcontent, which is inside adivwith idmain.Step 2: Check CSS selector validity in Selenium
All parts including#main,.content, child combinator>, and pseudo-class:first-childare valid CSS selectors supported by Selenium.Final Answer:
The selector syntax is correct and will work as expected. -> Option DQuick Check:
Valid CSS selector syntax = correct [OK]
- Assuming pseudo-classes like :first-child are unsupported
- Misunderstanding combinator usage
- Thinking spaces between selectors are always wrong
button elements that have both the class btn and an attribute data-action equal to save. Which CSS selector is correct?Solution
Step 1: Combine class and attribute selectors correctly
To select elements with a class and attribute, chain selectors without spaces:button.btn[data-action='save'].Step 2: Verify syntax details
Quotes around attribute value are recommended for exact matching; no spaces between element, class, and attribute selectors.Final Answer:
button.btn[data-action='save'] -> Option BQuick Check:
Combine selectors without spaces = button.btn[data-action='save'] [OK]
- Using spaces between element and class selectors
- Omitting quotes around attribute values
- Using # instead of . for class
Ready to prove it?
Pass the test and this pattern moves unknown
