Test Data
- Create Excel workbook
- 1st Col = ElementName
- 2nd Col = ElementSelector
- 2nd Col = ElementSelectorString
- Set column headers for each CssProperty
Example:
| ElementName | ElementXPath | A-B | accelerator | azimuth | background | background-attachment | background-color | background-image |
| WashingtonWatchSectionTitle | //h3[contains(.,"Washington Watch") and @class="section-title"]/.. | rgba(68, 108, 169, 1) |
TestBaseUtil: TestNG DataProvider
( or Class that reads Excel to HashMap<String,String>
- Create a data provider that reads from Excel
// DataProvider with HashTable
@DataProvider(name="getCssValuesData")
public static Object[][] getCssValuesData(Method m){
String sheetName = m.getName();
int rows = excel.getRowCount(sheetName);
//int rows = 2;
int cols = excel.getColumnCount(sheetName);
//int cols = 4;
System.out.println("worksheet rows/cols" + rows +"+"+cols);
//set returned object for multiple rows & 1 column
Object[][] data = new Object[rows-1][1];
Hashtable<String,String> table = null;
for (int rowNum = 2; rowNum <= rows; rowNum++) {
table = new Hashtable<String,String>();
for (int colNum=0;colNum < cols; colNum++) {
if(!excel.getCellData(sheetName, colNum, rowNum).isEmpty()) {
//data[0][0]
//get headers from ROW1, each column
table.put(excel.getCellData(sheetName, colNum, 1), excel.getCellData(sheetName, colNum, rowNum));
//data[table][0] = 'single column array with each row 'cell' containing the HashTable [with Header,Value pairs]
data[rowNum-2][0] = table;
}
}
}
return data;
}
TestBase
- While this class is beyond this particular topic...
- WebDriver instantiation, ExtentTest and TestNG setup exist here
- logInfo() adds a step to extent reports
- verifyStringEquals() is a wrapper for TestNG assertEquals, that has ExtentReport logging and anything else that facilitates test/reporting/logging
Test Class
- Since the data object has 2 columns that are for Element identification, these two "keys" should be filtered when iterating through the HashMap
- Additionally, if any field is EMPTY, don't use it to for validation.
- This allows for flexible data sets to be created that won't cause false negative due to null value to validate against
@Test(dataProviderClass = TestUtilPom.class, dataProvider = "getCssValuesData")
public void CssValues(Hashtable<String, String> data) throws InterruptedException {
System.out.println("TestCaseRunning.....");
String filespec = "/src/test/resources/excel/CssValues.xlsx";
loadExcelTestData(filespec);
ElementPage ep = new ElementPage(driver);
ep.gotoPage("https://www.schwab.com/resource-center/insights/");
String xpath = data.get("ElementXPath");
logInfo("Validating Element: " + xpath);
el = ep.getWebElementDD(xpath);
for (String cssprop : data.keySet()) {
if (!cssprop.equals("ElementXPath") && !cssprop.equals("ElementName")) {
System.out.println(cssprop);
logInfo("Validating CssPropery: " + cssprop);
verifyStringEquals(el.getCssValue(cssprop), data.get(cssprop));
}
}
}
Console Output
[RemoteTestNG] detected TestNG version 6.14.2 log4j:WARN No appenders could be found for logger (devpinoyLogger). Linuxlog4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Starting ChromeDriver 2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5) on port 3555 Only local connections are allowed. Using PPAPI flash. May 19, 2019 10:04:31 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS Chrome: /home/silosix/git/cmsauto/src/test/resources/executables/chromedriver-2.45-linux64/chromedriver worksheet rows/cols2+200 TestCaseRunning..... background-color =============================================== Sandbox Tests Total tests run: 1, Failures: 0, Skips: 0
ReportNG
CSSVALUES
2019-05-19 21:29:15 2019-05-19 21:29:19 0h 0m 3s+630ms
| Status | Timestamp | Details |
|---|---|---|
| 21:29:15 | CSSVALUES: START | |
| 21:29:19 | Getting Page | |
| 21:29:19 | Validating Element: //h3[contains(.,"Washington Watch") and @class="section-title"]/.. | |
| 21:29:19 | Validating CssPropery: background-color | |
| 21:29:19 | Asserting String Equals: ACTUAL: rgba(68, 108, 169, 1) EXPECTED: rgba(68, 108, 169, 1) | |
| 21:29:19 | CSSVALUES: DONE |
- Log in to post comments
