diff --git a/selenium-junit-testng/README.md b/selenium-junit-testng/README.md index f34081ccea..cc1b728287 100644 --- a/selenium-junit-testng/README.md +++ b/selenium-junit-testng/README.md @@ -1,2 +1,3 @@ ### Relevant Articles: - [Guide to Selenium with JUnit / TestNG](http://www.baeldung.com/java-selenium-with-junit-and-testng) +- [Testing a Site with Selenium / Webdriver](http://www.baeldung.com) diff --git a/selenium-junit-testng/chromedriver.exe b/selenium-junit-testng/chromedriver.exe new file mode 100644 index 0000000000..f6ce07cb32 Binary files /dev/null and b/selenium-junit-testng/chromedriver.exe differ diff --git a/selenium-junit-testng/chromedriver.linux b/selenium-junit-testng/chromedriver.linux new file mode 100755 index 0000000000..1fb5667a0b Binary files /dev/null and b/selenium-junit-testng/chromedriver.linux differ diff --git a/selenium-junit-testng/chromedriver.mac b/selenium-junit-testng/chromedriver.mac new file mode 100755 index 0000000000..9ccb03049b Binary files /dev/null and b/selenium-junit-testng/chromedriver.mac differ diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml index 5c77e0c9ff..d44a81639c 100644 --- a/selenium-junit-testng/pom.xml +++ b/selenium-junit-testng/pom.xml @@ -57,6 +57,11 @@ junit ${junit.version} + + org.hamcrest + hamcrest-all + 1.3 + diff --git a/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java b/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java new file mode 100644 index 0000000000..7fde09d817 --- /dev/null +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java @@ -0,0 +1,60 @@ +package main.java.com.baeldung.selenium.config; + +import org.openqa.selenium.Capabilities; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.remote.DesiredCapabilities; + +import java.io.File; + +public class SeleniumConfig { + + private WebDriver driver; + + public SeleniumConfig() { + Capabilities capabilities = DesiredCapabilities.chrome(); + driver = new ChromeDriver(capabilities); + } + + static { + if (getOsName("os.name").toLowerCase().contains("mac")) { + System.setProperty("webdriver.chrome.driver", findFile("chromedriver.mac")); + } else if (getOsName("os.name").toLowerCase().contains("nix") || + getOsName("os.name").toLowerCase().contains("nux") || + getOsName("os.name").toLowerCase().contains("aix")) { + System.setProperty("webdriver.chrome.driver", findFile("chromedriver.linux")); + } else if (getOsName("os.name").toLowerCase().contains("win")) { + System.setProperty("webdriver.chrome.driver", findFile("chromedriver.exe")); + } + } + + private static String getOsName(String prop) { + return (System.getProperty(prop)); + } + + static private String findFile(String filename) { + String paths[] = {"", "bin/", "target/classes"}; // if you have chromedriver somewhere else on the path, then put it here. + for (String path : paths) { + if (new File(path + filename).exists()) + return path + filename; + } + return ""; + } + + public void close() { + driver.quit(); + } + + public void navigateTo(String url) { + driver.navigate().to(url); + } + + public void clickElement(WebElement element) { + element.click(); + } + + public WebDriver getDriver() { + return driver; + } +} diff --git a/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java b/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java new file mode 100644 index 0000000000..838beb5326 --- /dev/null +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java @@ -0,0 +1,23 @@ +package main.java.com.baeldung.selenium.models; + +import main.java.com.baeldung.selenium.config.SeleniumConfig; +import main.java.com.baeldung.selenium.pages.BaeldungAboutPage; +import org.openqa.selenium.support.PageFactory; + +public class BaeldungAbout { + + private SeleniumConfig config; + + public BaeldungAbout(SeleniumConfig config) { + this.config = config; + PageFactory.initElements(config.getDriver(), BaeldungAboutPage.class); + } + + public void navigateTo() { + config.navigateTo("http://www.baeldung.com/about/"); + } + + public String getPageTitle() { + return BaeldungAboutPage.title.getText(); + } +} diff --git a/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java b/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java new file mode 100644 index 0000000000..d33cb76398 --- /dev/null +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java @@ -0,0 +1,10 @@ +package main.java.com.baeldung.selenium.pages; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class BaeldungAboutPage { + + @FindBy(css = ".page-header > h1") + public static WebElement title; +} diff --git a/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java b/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java new file mode 100644 index 0000000000..55a8044375 --- /dev/null +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java @@ -0,0 +1,37 @@ +package main.java.com.baeldung.selenium.pages; + +import main.java.com.baeldung.selenium.config.SeleniumConfig; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; + +public class BaeldungHomePage { + + private SeleniumConfig config; + @FindBy(css=".header--menu > a") + private WebElement title; + @FindBy(css = ".menu-start-here > a") + private WebElement startHere; + + public BaeldungHomePage(SeleniumConfig config) { + this.config = config; + PageFactory.initElements(this.config.getDriver(), this); + } + + public void navigate() { + this.config.navigateTo("http://www.baeldung.com/"); + } + + public String getPageTitle() { + return title.getAttribute("title"); + } + + public StartHerePage clickOnStartHere() { + config.clickElement(startHere); + + StartHerePage startHerePage = new StartHerePage(config); + PageFactory.initElements(config.getDriver(), startHerePage); + + return startHerePage; + } +} diff --git a/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java b/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java new file mode 100644 index 0000000000..4f0ee9edcd --- /dev/null +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java @@ -0,0 +1,21 @@ +package main.java.com.baeldung.selenium.pages; + +import main.java.com.baeldung.selenium.config.SeleniumConfig; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class StartHerePage { + + private SeleniumConfig config; + + @FindBy(css = ".page-title") + private WebElement title; + + public StartHerePage(SeleniumConfig config) { + this.config = config; + } + + public String getPageTitle() { + return title.getText(); + } +} diff --git a/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumPageObjectTest.java b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumPageObjectTest.java new file mode 100644 index 0000000000..f47110f86e --- /dev/null +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumPageObjectTest.java @@ -0,0 +1,50 @@ +package test.java.com.baeldung.selenium.junit; + +import main.java.com.baeldung.selenium.config.SeleniumConfig; +import main.java.com.baeldung.selenium.models.BaeldungAbout; +import main.java.com.baeldung.selenium.pages.BaeldungHomePage; +import main.java.com.baeldung.selenium.pages.StartHerePage; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +public class SeleniumPageObjectTest { + + private SeleniumConfig config; + private BaeldungHomePage homePage; + private BaeldungAbout about; + + @Before + public void setUp() { + config = new SeleniumConfig(); + homePage = new BaeldungHomePage(config); + about = new BaeldungAbout(config); + } + + @After + public void teardown() { + config.close(); + } + + @Test + public void givenHomePage_whenNavigate_thenTitleMatch() { + homePage.navigate(); + assertThat(homePage.getPageTitle(), is("Baeldung")); + } + + @Test + public void givenHomePage_whenNavigate_thenShouldBeInStartHere() { + homePage.navigate(); + StartHerePage startHerePage = homePage.clickOnStartHere(); + assertThat(startHerePage.getPageTitle(), is("Start Here")); + } + + @Test + public void givenAboutPage_whenNavigate_thenTitleMatch() { + about.navigateTo(); + assertThat(about.getPageTitle(), is("About Baeldung")); + } +}