page
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import supports.Browser;
import java.util.List;
import java.util.stream.Collectors;
public class Todos {
private Browser browser;
private final String BASE_URL="http://todomvc.com/examples/vanillajs";
private final By newTodoTxt = By.className("new-todo");
private final By todosLeftLbl = By.cssSelector(".todo-count > strong");
private final By editTodoBtn = By.cssSelector("input.edit");
private final By removeTodoBtn = By.cssSelector("button.destroy");
private final By completeTodoBtn = By.cssSelector("input.toggle");
private final By markCompleteAllBtn = By.className("toggle-all");
private final By activeTab =By.cssSelector("a[href='#/active']");
private final By completedTab =By.cssSelector("a[href='#/completed']");
private final By clearCompletedBtn = By.className("clear-completed");
private final By todosLbl = By.cssSelector(".todo-list li");
public Todos(Browser browser) {
this.browser = browser;
}
public void navigateTo() {
browser.open(BASE_URL);
}
public void createTodo(String todoName) {
browser.type(newTodoTxt, todoName + Keys.ENTER);
}
public void createTodos(String... todoNames) {
for (String todoName : todoNames) {
createTodo(todoName);
}
}
public int getTodosLeft() {
return Integer.parseInt(browser.find(todosLeftLbl).getText());
}
public boolean todoExists(String todoName) {
return getTodos().stream().anyMatch(todoName::equals);
}
public int getTodoCount() {
return getTodoElements().size();
}
public List<String> getTodos() {
return getTodoElements()
.stream()
.map(WebElement::getText)
.collect(Collectors.toList());
}
public void renameTodo(String todoName, String newTodoName) {
WebElement todoToEdit = getTodoElementByName(todoName);
browser.doubleClick(todoToEdit);
WebElement todoEditInput = browser.find(editTodoBtn, todoToEdit);
browser.executeScript("arguments[0].value = ''", todoEditInput);
browser.type(todoEditInput, newTodoName + Keys.ENTER);
}
public void removeTodo(String todoName) {
WebElement todoToRemove = getTodoElementByName(todoName);
browser.moveToElement(todoToRemove);
browser.click(removeTodoBtn, todoToRemove);
}
public void completeTodo(String todoName) {
WebElement todoToComplete = getTodoElementByName(todoName);
browser.click(completeTodoBtn, todoToComplete);
}
public void completeAllTodos() {
browser.click(markCompleteAllBtn);
}
public void showActive() {
browser.click(activeTab);
}
public void showCompleted() {
browser.click(completedTab);
}
public void clearCompleted() {
browser.click(clearCompletedBtn);
}
private List<WebElement> getTodoElements() {
return browser.findAll(todosLbl);
}
private WebElement getTodoElementByName(String todoName) {
return getTodoElements()
.stream()
.filter(el -> todoName.equals(el.getText()))
.findFirst()
.orElseThrow(() -> new AssertionError("Test data missing!"));
}
}
Last updated
Was this helpful?