├── README.md ├── pom.xml └── src ├── main └── java │ └── pages │ └── TodosPage.java └── test └── java ├── base └── BaseTests.java └── tasks └── AddTasksTests.java /README.md: -------------------------------------------------------------------------------- 1 | # New Java Features in Test Automation 2 | 3 | This code base demonstrates newer features from Java 8 - Java 12 within the context of test automation. 4 | 5 | Features shown: 6 | 7 | * List.of 8 | 9 | * Type Inference for Local Variables (var) 10 | 11 | * forEach 12 | 13 | * Lambdas 14 | 15 | * Streams 16 | 17 | The accompanying blog post that explains this code base can be found here: 18 | http://angiejones.tech/new-java-features-test-automation 19 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | new-java-features 8 | todo_app 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 1.12 13 | 1.12 14 | 15 | 16 | 17 | 18 | org.seleniumhq.selenium 19 | selenium-chrome-driver 20 | 3.141.59 21 | 22 | 23 | 24 | org.testng 25 | testng 26 | 6.14.3 27 | test 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/main/java/pages/TodosPage.java: -------------------------------------------------------------------------------- 1 | package pages; 2 | 3 | import org.openqa.selenium.By; 4 | import org.openqa.selenium.Keys; 5 | import org.openqa.selenium.WebDriver; 6 | import org.openqa.selenium.WebElement; 7 | 8 | import java.util.List; 9 | import java.util.stream.Collectors; 10 | 11 | public class TodosPage { 12 | 13 | private WebDriver driver; 14 | private By newTaskField = By.className("new-todo"); 15 | private By tasks = By.cssSelector(".todo-list li"); 16 | 17 | public TodosPage(WebDriver driver){ 18 | this.driver = driver; 19 | } 20 | 21 | public void addTask(String task){ 22 | driver.findElement(newTaskField).sendKeys(task + Keys.ENTER); 23 | } 24 | 25 | public List getAllTasks(){ 26 | return driver.findElements(tasks).stream().map(WebElement::getText).collect(Collectors.toList()); 27 | } 28 | } -------------------------------------------------------------------------------- /src/test/java/base/BaseTests.java: -------------------------------------------------------------------------------- 1 | package base; 2 | 3 | import org.openqa.selenium.WebDriver; 4 | import org.openqa.selenium.chrome.ChromeDriver; 5 | import org.testng.annotations.AfterClass; 6 | import org.testng.annotations.BeforeClass; 7 | import pages.TodosPage; 8 | 9 | public class BaseTests { 10 | 11 | private WebDriver driver; 12 | protected TodosPage todosPage; 13 | 14 | @BeforeClass 15 | public void setUp(){ 16 | System.setProperty("webdriver.chrome.driver", "resources/chromedriver"); 17 | driver = new ChromeDriver(); 18 | driver.get("http://todomvc-app-for-testing.surge.sh/"); 19 | todosPage = new TodosPage(driver); 20 | } 21 | 22 | @AfterClass 23 | public void tearDown(){ 24 | driver.quit(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/test/java/tasks/AddTasksTests.java: -------------------------------------------------------------------------------- 1 | package tasks; 2 | 3 | import base.BaseTests; 4 | import org.testng.annotations.Test; 5 | 6 | import java.util.List; 7 | 8 | import static org.testng.Assert.assertTrue; 9 | import static org.testng.Assert.assertEquals; 10 | 11 | public class AddTasksTests extends BaseTests { 12 | 13 | @Test 14 | public void addTasks(){ 15 | 16 | var tasks = List.of("pay mortgage bill","make dentist appointment","get car washed"); 17 | tasks.forEach(todosPage::addTask); 18 | 19 | var addedTasksList = todosPage.getAllTasks(); 20 | assertTrue(addedTasksList.containsAll(tasks), "Task items"); 21 | assertEquals(addedTasksList.size(), tasks.size(), "Number of tasks"); 22 | } 23 | } 24 | --------------------------------------------------------------------------------