A sample framework based on Page Object Model, Selenium, TestNG using Java.
This framework is based in Page Object Model (POM).
The framework uses:
- Java
- Selenium
- TestNG
- ExtentReport
- Log4j
- SimpleJavaMail
Let's say we want to automate Google search test.
1.Create GoogleSearchPage in pages package.
A page class typically should contain all the elements that are present on the page and corresponding action methods.
public class GooglePage extends BasePage {
@FindBy(name = "q")
private WebElement searchinput;
public GooglePage(WebDriver driver) {
super(driver);
}
public void searchText(String key) {
searchinput.sendKeys(key + Keys.ENTER);
}
}
2.Create the test class which class the methods of GoogleSearchPage
@Test(testName = "Google search test", description = "Test description")
public class GoogleSearchTest extends BaseTest {
@Test
public void googleSearchTest() {
driver.get("https://www.google.co.in/");
GooglePage googlePage = PageinstancesFactory.getInstance(GooglePage.class);
googlePage.searchText("abc");
Assert.assertTrue(driver.getTitle().contains("abc"), "Title doesn't contain abc : Test Failed");
}
}
3.Add the test class in testng.xml file under the folder src/test/resources/suites/
<suite name="Suite">
<listeners></listeners>
<test thread-count="5" name="Test" parallel="classes">
<classes>
<class name="example.example.tests.GoogleSearchTest" />
4.Execute the test cases by maven command mvn clean test
The framework gives report in three ways,
- Log - In file
logfile.log
. - A html report - Which is generated using extent reports, under the folder
ExtentReports
. - A mail report - For which the toggle
mail.sendmail
intest.properties
should be settrue
. And all the properties such assmtp host, port, proxy details, etc.,
should be provided correctly.
- The class
WebDriverContext
is responsible for maintaining the same WebDriver instance throughout the test. So whenever you require a webdriver instance which has been using for current test (In current thread) always callWebDriverContext.getDriver()
. - Always use
PageinstancesFactory.getInstance(type)
to get the instance of particular Page Object. (Of course you can usenew
but it's better use a single approach across the framework.
For any query or suggestions please do comment or mail @ [email protected]