Bird
Raised Fist0
Selenium Javatesting~10 mins

Why selector mastery prevents fragile tests in Selenium Java - Test Your Understanding

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to find an element by its unique ID using Selenium in Java.

Selenium Java
WebElement element = driver.findElement(By.[1]("submit-button"));
Drag options to blanks, or click blank then click option'
AlinkText
BclassName
CtagName
Did
Attempts:
3 left
💡 Hint
Common Mistakes
Using By.className when the ID is available
Using By.tagName which is too broad
Using By.linkText for non-link elements
2fill in blank
medium

Complete the code to locate an element using a CSS selector that targets a button with class 'btn-primary'.

Selenium Java
WebElement button = driver.findElement(By.[1]("button.btn-primary"));
Drag options to blanks, or click blank then click option'
Axpath
BcssSelector
Cid
Dname
Attempts:
3 left
💡 Hint
Common Mistakes
Using By.id when no ID exists
Using By.name which may not be unique
Using By.xpath unnecessarily for simple selectors
3fill in blank
hard

Fix the error in the XPath selector to find a link with text 'Home'.

Selenium Java
WebElement homeLink = driver.findElement(By.xpath("//a[[1]='Home']"));
Drag options to blanks, or click blank then click option'
Avalue
BinnerText
Ctext()
Dname
Attempts:
3 left
💡 Hint
Common Mistakes
Using innerText or value instead of text()
Using name attribute which may not exist
Forgetting to use quotes around 'Home'
4fill in blank
hard

Fill both blanks to create a CSS selector that finds an input element with type 'checkbox' and name 'subscribe'.

Selenium Java
WebElement checkbox = driver.findElement(By.cssSelector("input[1][[2]='subscribe']"));
Drag options to blanks, or click blank then click option'
A[type='checkbox']
Bname
Ctype
D.checkbox
Attempts:
3 left
💡 Hint
Common Mistakes
Using .checkbox which selects by class, not attribute
Swapping 'type' and 'name' in the selector
Omitting the attribute selector syntax
5fill in blank
hard

Fill all three blanks to create a Java Selenium code snippet that finds all visible buttons with class 'action' and asserts the count is 3.

Selenium Java
List<WebElement> buttons = driver.findElements(By.[1]("button.action"));
int visibleCount = 0;
for (WebElement btn : buttons) {
    if (btn.is[2]()) {
        visibleCount[3];
    }
}
assertEquals(3, visibleCount);
Drag options to blanks, or click blank then click option'
AcssSelector
BDisplayed
C++
Dxpath
Attempts:
3 left
💡 Hint
Common Mistakes
Using xpath unnecessarily for simple selectors
Using isEnabled() instead of isDisplayed() for visibility
Forgetting to increment the counter

Practice

(1/5)
1. Why is it important to use unique attributes like id or name in Selenium selectors?
easy
A. They are harder to write and maintain.
B. They slow down the test execution significantly.
C. They always cause tests to fail.
D. They make tests more stable and less likely to break when the page changes.

Solution

  1. Step 1: Understand selector uniqueness

    Unique attributes like id or name identify elements clearly without confusion.
  2. Step 2: Impact on test stability

    Using unique selectors reduces the chance tests break when page layout or styles change.
  3. Final Answer:

    They make tests more stable and less likely to break when the page changes. -> Option D
  4. Quick Check:

    Unique selectors = stable tests [OK]
Hint: Pick selectors with unique attributes for stable tests [OK]
Common Mistakes:
  • Choosing selectors based on visible text only
  • Using generic tags like div without attributes
  • Ignoring the importance of uniqueness
2. Which of the following is the correct syntax to locate an element by its id in Selenium Java?
easy
A. driver.findElement(By.id("submitBtn"));
B. driver.findElement(By.name="submitBtn");
C. driver.findElement(By.className("submitBtn"));
D. driver.findElement(By.tag("submitBtn"));

Solution

  1. Step 1: Recall Selenium locator syntax

    The correct method to find by id is By.id("value").
  2. Step 2: Check each option

    driver.findElement(By.id("submitBtn")); uses By.id("submitBtn"), which is correct syntax. Others use incorrect methods or syntax.
  3. Final Answer:

    driver.findElement(By.id("submitBtn")); -> Option A
  4. Quick Check:

    Use By.id("...") for id selectors [OK]
Hint: Use By.id("...") to select by id attribute [OK]
Common Mistakes:
  • Using assignment (=) instead of method parameter syntax
  • Confusing By.name and By.id
  • Using non-existent locator methods like By.tag
3. Given the following code snippet, what will be the output if the element with id loginBtn is not present on the page?
try {
  WebElement button = driver.findElement(By.id("loginBtn"));
  System.out.println("Button found");
} catch (NoSuchElementException e) {
  System.out.println("Button not found");
}
medium
A. Button found
B. Button not found
C. No output
D. Compilation error

Solution

  1. Step 1: Understand findElement behavior

    If the element is missing, findElement throws NoSuchElementException.
  2. Step 2: Analyze try-catch block

    The exception is caught, so the catch block prints "Button not found".
  3. Final Answer:

    Button not found -> Option B
  4. Quick Check:

    Missing element triggers catch block [OK]
Hint: Missing element triggers NoSuchElementException catch [OK]
Common Mistakes:
  • Assuming findElement returns null if not found
  • Ignoring exception handling
  • Confusing findElement with findElements
4. You wrote this selector: driver.findElement(By.xpath("//div[@class='btn']")). Your test breaks when the page adds another div with class btn. How can you fix this fragile selector?
medium
A. Use Thread.sleep() before finding the element.
B. Change the selector to By.tagName("div") to select all divs.
C. Use a more specific attribute like an id or unique data-test attribute.
D. Remove the class condition and select by div only.

Solution

  1. Step 1: Identify fragility cause

    The selector matches multiple elements because class btn is not unique.
  2. Step 2: Improve selector specificity

    Using a unique attribute like id or data-test makes the selector stable and precise.
  3. Final Answer:

    Use a more specific attribute like an id or unique data-test attribute. -> Option C
  4. Quick Check:

    Specific unique attributes prevent fragile selectors [OK]
Hint: Pick unique attributes to avoid multiple matches [OK]
Common Mistakes:
  • Selecting all divs causes more fragility
  • Ignoring selector uniqueness
  • Using waits instead of fixing selectors
5. You have a test that uses this selector:
driver.findElement(By.cssSelector("button.submit-btn"))
After a page update, the class name changes to submit-button. What is the best way to prevent such fragile tests in the future?
hard
A. Ask developers to add a unique data-test attribute and use it in selectors.
B. Use XPath with contains() to match partial class names.
C. Use absolute XPath from the root element to the button.
D. Avoid using selectors and rely on screen coordinates.

Solution

  1. Step 1: Understand fragility cause

    Class names often change due to styling updates, breaking selectors based on them.
  2. Step 2: Use stable attributes for selectors

    Unique data-test attributes are designed for testing and rarely change, making tests stable.
  3. Final Answer:

    Ask developers to add a unique data-test attribute and use it in selectors. -> Option A
  4. Quick Check:

    Stable test attributes prevent fragile selectors [OK]
Hint: Use dedicated test attributes like data-test for stable selectors [OK]
Common Mistakes:
  • Using fragile class names in selectors
  • Using absolute XPath which breaks easily
  • Relying on screen coordinates which are unreliable
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard