LogoLogo
  • 🏹Lời nói đầu
  • 1. Introduction
  • 💡1.1. Các hoạt động trong 1 vòng kiểm thử
  • 💡1.2. Các cách tiếp cận khi viết automation test
  • 🔮1.3. Con đường phát triển của một kỹ sư kiểm thử phần mềm
  • ✅1.4. Quy trình của một dự án kiểm thử tự động
  • 🤖1.5. Các Framework trong kiểm thử tự động
  • 💎1.6. Selenium Java Basic mindmap
  • 📜1.7. Test cases
  • 2. Setup new maven project
    • ☕2.1. Install Java JDK
    • ☕2.2. Setup Maven
    • ☕2.3 Add Maven Dependencies
    • ☕2.4. Java practices
      • ⌨️2.4. Java Coding Practice
      • 📔Java Stream
        • 🍀Java 8 Stream - Xử lý Array, List nhanh gọn
          • 🛵1. find person that has mass >100
            • 🚜2. total mass of characters
            • 🚍3. total height of characters
            • 🚲4. get list name of person
            • 🛴5. find max mass person
            • 🚒6. find smallest person
            • 🚂7. sort by name
            • 🏎️8. sort by mass
      • 📁Logging
        • 🍏Log4j 2
  • 3. browsers
    • 🚚3.1. What is WebDriver?
    • 3.2. Chrome Browser
      • 🕸️Open Chrome Browser
        • Capture Performance metrics in chrome with selenium 4.0
        • Open Chrome Browser in Mobile mode
        • How to set specified chrome version to start
        • Interception Network tab
        • Open Chrome Browser - Headless mode
      • Fake GeoLocation
    • 3.3. Open Firefox Browser
      • Open Firefox Browser - Headless mode
    • 3.4. Open Edge Browser (Chromium)
    • 3.5. Open Safari browser
  • 🌞4. Inspect locators
  • 4.1. Understand HTML structure
  • 4.2. Locator Table
  • 4.3. Standard Naming Convention for UI Elements to Use with Selenium Locators
  • 4.4. FindElement
  • 4.5. Locating elements with XPath axis
  • 🍏5. Test Cases
    • 5.1. Form Authentication
    • 5.2. Drop Down
    • 5.3. Checkboxes
    • 5.4. Hyperlink
    • 5.5. Web Table
    • 5.6. JavaScript Alert
    • 5.7. Nest Frames
    • 5.8. Context menu
    • 5.9. Hover
    • 5.10. Broken Link
    • 5.11. Click Element via JS
    • 5.12. Wait for loading
    • 5.13. Pass params though XPath string
    • 5.14. Date picker
    • 5.15. Capture Screenshot
  • 6. TestNG
    • Annotations
    • testng.xml
      • parameter
      • Filter by group
      • Listener
      • Parallel
  • Capture screenshot when test failed
  • 🍐7. Page Object Model
    • What is?
    • Approach 1: Using String for exposing elements
    • Approach 2: Using By for exposing elements
    • Approach 3: Using PageFactory for exposing elements
    • Todo MVC sample page
      • page
      • supports
      • testcases
  • 8. Circle CI - Github Actions
    • Integrate Circle CI
  • 🥞9. Owner methods
    • Selenium owner methods
  • Interview
    • How I interview tester
      • 35 Challenging Interview Questions for Testers
    • Git căn bản
    • VSCODE
Powered by GitBook

Copyright @testingvn.com

On this page

Was this helpful?

  1. 7. Page Object Model
  2. Todo MVC sample page

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!"));
    }

}
PreviousTodo MVC sample pageNextsupports

Last updated 4 years ago

Was this helpful?

🍐