- 310 registry:skill items, 1528 files, 7 categories (hub tags) - registry.json generated by @kortix/registry buildRegistry - nested SKILL.md in sn-da-* renamed SUBSKILL.md (no phantom skills) - provenance + licenses: SOURCES.md
2.5 KiB
2.5 KiB
Selenium — Page Object Model
Base Page Class
public abstract class BasePage {
protected WebDriver driver;
protected WebDriverWait wait;
public BasePage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
protected WebElement waitForVisible(By locator) {
return wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
}
protected WebElement waitForClickable(By locator) {
return wait.until(ExpectedConditions.elementToBeClickable(locator));
}
protected void type(By locator, String text) {
WebElement el = waitForVisible(locator);
el.clear();
el.sendKeys(text);
}
protected void click(By locator) {
waitForClickable(locator).click();
}
protected String getText(By locator) {
return waitForVisible(locator).getText();
}
protected boolean isDisplayed(By locator) {
try {
return waitForVisible(locator).isDisplayed();
} catch (Exception e) {
return false;
}
}
}
Concrete Page Object
public class LoginPage extends BasePage {
private By usernameField = By.id("username");
private By passwordField = By.id("password");
private By loginButton = By.cssSelector("button[type='submit']");
private By errorMessage = By.cssSelector(".error-message");
public LoginPage(WebDriver driver) {
super(driver);
}
public LoginPage navigate() {
driver.get("https://example.com/login");
waitForVisible(usernameField);
return this;
}
public DashboardPage loginAs(String username, String password) {
type(usernameField, username);
type(passwordField, password);
click(loginButton);
return new DashboardPage(driver);
}
public String getErrorMessage() {
return getText(errorMessage);
}
}
Page Factory Pattern
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class LoginPage {
@FindBy(id = "username") private WebElement usernameField;
@FindBy(id = "password") private WebElement passwordField;
@FindBy(css = "button[type='submit']") private WebElement loginButton;
public LoginPage(WebDriver driver) {
PageFactory.initElements(driver, this);
}
public void login(String user, String pass) {
usernameField.sendKeys(user);
passwordField.sendKeys(pass);
loginButton.click();
}
}