├── 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 |
--------------------------------------------------------------------------------