Skip to main content

Element Validations

assertThat vs verifyThat

assertThat (Hard)verifyThat (Soft)
Failure behaviourStops the test immediatelyContinues; collects all failures
Use forBusiness-critical checkpointsMultiple validations in one test
tip

Always call .perform() at the end of every validation chain — without it the validation will not execute.


Text Validations

text().isEqualTo()

TextEquals.java
driver.assertThat(locator).text().isEqualTo("Add to cart").perform();
driver.verifyThat(locator).text().isEqualTo("Add to cart").perform();

text().contains()

TextContains.java
driver.assertThat(locator).text().contains("Welcome").perform();

text().equalsIgnoringCaseSensitivity()

TextEqualsIgnoreCase.java
driver.assertThat(locator).text().equalsIgnoringCaseSensitivity("SHAFT ENGINE").perform();

textTrimmed()

Validates text after stripping leading and trailing whitespace:

TextTrimmed.java
driver.assertThat(locator).textTrimmed().isEqualTo("Hello World").perform();

Existence & Visibility

exists() / doesNotExist()

Existence.java
driver.assertThat(locator).exists().perform();
driver.assertThat(locator).doesNotExist().perform();

isVisible() / isHidden()

Visibility.java
driver.assertThat(locator).isVisible().perform();
driver.assertThat(locator).isHidden().perform();

Element State

isEnabled() / isDisabled()

EnabledDisabled.java
driver.assertThat(locator).isEnabled().perform();
driver.assertThat(locator).isDisabled().perform();

isSelected() / isNotSelected()

SelectedNotSelected.java
driver.assertThat(locator).isSelected().perform();
driver.assertThat(locator).isNotSelected().perform();

isChecked() / isNotChecked()

CheckedNotChecked.java
driver.assertThat(locator).isChecked().perform();
driver.assertThat(locator).isNotChecked().perform();

Attribute & CSS Validations

attribute()

Attribute.java
driver.assertThat(locator).attribute("class").contains("active").perform();
driver.assertThat(locator).attribute("href").isEqualTo("https://example.com").perform();
driver.assertThat(locator).attribute("aria-label").contains("Submit").perform();

cssProperty()

CssProperty.java
driver.assertThat(locator).cssProperty("color").contains("rgb(0, 128, 0)").perform();
driver.assertThat(locator).cssProperty("display").isEqualTo("none").perform();

Visual Validation

matchesReferenceImage()

On the first run, SHAFT saves a baseline screenshot. On subsequent runs it compares against the baseline.

VisualValidation.java
driver.assertThat(locator).matchesReferenceImage().perform();
driver.assertThat(locator).doesNotMatchReferenceImage().perform();

Baseline images are saved in src/test/resources/DynamicObjectRepository/. See Visual Testing → for engine options.


Custom Report Messages

Add a business-readable message to any validation:

CustomMessage.java
driver.assertThat(By.id("cart-badge"))
.text().isEqualTo("3")
.withCustomReportMessage("Cart should contain exactly 3 items after adding the product")
.perform();

Complete Example

src/test/java/tests/CheckoutValidationTest.java
import com.shaft.driver.SHAFT;
import org.openqa.selenium.By;
import org.testng.annotations.*;

public class CheckoutValidationTest {
private SHAFT.GUI.WebDriver driver;

private final By addToCartBtn = By.cssSelector("[data-test='add-to-cart']");
private final By cartBadge = By.className("shopping_cart_badge");
private final By checkoutBtn = By.id("checkout");
private final By orderSummary = By.id("order-summary");
private final By placeOrderBtn = By.id("place-order");

@Test
public void checkoutFlow() {
driver.browser().navigateToURL("https://example.com/products");

// Add item and check badge
driver.element().click(addToCartBtn);
driver.assertThat(cartBadge)
.text().isEqualTo("1")
.withCustomReportMessage("Cart badge must show 1 after adding an item")
.perform();

// Proceed to checkout
driver.element().click(checkoutBtn);
driver.assertThat().browser().url().contains("/checkout").perform();

// Verify order summary is displayed
driver.assertThat(orderSummary)
.isVisible()
.withCustomReportMessage("Order summary must be visible on checkout page")
.perform();

// Verify place order button is enabled
driver.assertThat(placeOrderBtn)
.isEnabled()
.withCustomReportMessage("Place Order button must be enabled")
.perform();
}

@BeforeMethod
public void setup() {
driver = new SHAFT.GUI.WebDriver();
}

@AfterMethod
public void teardown() {
driver.quit();
}
}

See Also