DEV Community

Big Show
Big Show

Posted on

Music

MUSIC

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import org.testng.Assert; // Using TestNG's Assert
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class AutomationScenarioTest {

private WebDriver driver;
private String originalWindowHandle;

/**

  • Helper method to read data from the .xls file
  • Assumes data is in the first sheet, on the second row (index 1)
    */
    private static Map readExcelData(String filePath) throws IOException {
    Map data = new HashMap<>();
    FileInputStream fis = new FileInputStream(filePath);

    // Use HSSFWorkbook for .xls files
    Workbook workbook = new HSSFWorkbook(fis);
    Sheet sheet = workbook.getSheetAt(0); // Assuming first sheet

    // DataFormatter handles different cell types
    DataFormatter formatter = new DataFormatter();

    // Assuming headers are in Row 0 and data is in Row 1
    Row dataRow = sheet.getRow(1);

    // Assuming Column 0 = Contact, Column 1 = Email, Column 2 = Tickets
    String contact = formatter.formatCellValue(dataRow.getCell(0));
    String email = formatter.formatCellValue(dataRow.getCell(1));
    String tickets = formatter.formatCellValue(dataRow.getCell(2));

    data.put("contact", contact);
    data.put("email", email);
    data.put("tickets", tickets);

    workbook.close();
    fis.close();

    return data;
    }

@BeforeTest
public void setup() {
// --- Step 1: Use appropriate Setup method to: ---

// Set the driver property
System.setProperty("webdriver.gecko.driver", "/home/user/Desktop/geckodriver");

// Initialize Firefox driver
driver = new FirefoxDriver();

// Set an implicit wait of 12 seconds
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(12));

// Open the application using url
driver.get("http://localhost:8080/application/");

// Maximize the browser
driver.manage().window().maximize();

// Store the original window handle for later use
originalWindowHandle = driver.getWindowHandle();
Enter fullscreen mode Exit fullscreen mode

}

@test
public void executeAutomationScenario() throws Exception {

// --- Step 2: Click on Events link. ---
// *ASSUMED LOCATOR*
driver.findElement(By.linkText("Events")).click();

// --- Step 3: Select Music check box. ---
// *ASSUMED LOCATOR*
WebElement musicCheckbox = driver.findElement(By.id("musicCheckbox")); // e.g., //input[@value='Music']
musicCheckbox.click();

// --- Step 4: Using webtable iteration... print all the contents of Events Table ---
System.out.println("\n--- Events Table Contents ---");
// *ASSUMED LOCATOR*
WebElement eventsTable = driver.findElement(By.id("eventsTable")); // e.g., //table[@name='events']

// Print Headers (th)
List<WebElement> headers = eventsTable.findElements(By.tagName("th"));
for (WebElement header : headers) {
  System.out.print(header.getText() + "\t\t");
}
System.out.println("\n---------------------------------");

// Print Rows (tr)
List<WebElement> rows = eventsTable.findElements(By.tagName("tr"));
for (WebElement row : rows) {
  List<WebElement> cells = row.findElements(By.tagName("td"));
  for (WebElement cell : cells) {
    System.out.print(cell.getText() + "\t\t");
  }
  if (!cells.isEmpty()) {
    System.out.println();
  }
}
System.out.println("--- End of Table ---");

// --- Step 5: Deselect the Music check box. ---
musicCheckbox.click();

// --- Step 6: Select the Adventure checkbox and select radio button against to Skydiving Celebration. ---
// *ASSUMED LOCATOR*
driver.findElement(By.id("adventureCheckbox")).click(); // e.g., //input[@value='Adventure']

// *ASSUMED LOCATOR (XPath)*
WebElement skydivingRadio = driver.findElement(By.xpath("//tr[contains(., 'Skydiving Celebration')]//input[@type='radio']"));
skydivingRadio.click();

// --- Step 7: Accept the alert box. ---
System.out.println("Accepting alert from step 6...");
Alert alert1 = driver.switchTo().alert();
alert1.accept();

// --- Step 8: ...print the URLs of each window and switch to the new tab... ---
Thread.sleep(2000); // Wait for new window

Set<String> allWindowHandles = driver.getWindowHandles();
String newWindowHandle = null;

System.out.println("Printing all window URLs:");
for (String handle : allWindowHandles) {
  driver.switchTo().window(handle);
  System.out.println("Window URL: " + driver.getCurrentUrl());
  if (!handle.equals(originalWindowHandle)) {
    newWindowHandle = handle; // Found the new window
  }
}

// Switch to the new window to work on it
Assert.assertNotNull(newWindowHandle, "New window was not found!");
driver.switchTo().window(newWindowHandle);
System.out.println("Switched to new window.");

// --- Step 9: Fetch the title of the newly opened window... ---
String newTitle = driver.getTitle();
System.out.println("New window title is: " + newTitle);
if (newTitle.equals("BookThyEvent: Booking")) {
  System.out.println("Desired window found");
} else {
  System.out.println("Desired window not found");
}
// TestNG assertion
Assert.assertEquals(newTitle, "BookThyEvent: Booking", "Window title mismatch!");


// --- Step 10: Parameterize the fields... ---
String excelFilePath = "/home/user/Desktop/user_repo/To_Participant/AdditionalSuppliedFiles/Data.xls";
Map<String, String> testData = readExcelData(excelFilePath);

// Fill the form
// *ASSUMED LOCATORS*
driver.findElement(By.id("contactNumber")).sendKeys(testData.get("contact"));
driver.findElement(By.id("emailId")).sendKeys(testData.get("email"));
driver.findElement(By.id("numTickets")).sendKeys(testData.get("tickets"));

// Click on "Check Valid data" and "Calculate cost" buttons
// *ASSUMED LOCATORS*
driver.findElement(By.id("checkValidDataButton")).click();
driver.findElement(By.id("calculateCostButton")).click();

// Accept the alert
System.out.println("Accepting alert from step 10...");
Alert alert2 = driver.switchTo().alert();
alert2.accept();

// --- Step 11: Switch back to the default window... ---
driver.close(); // Close the current (new) window
driver.switchTo().window(originalWindowHandle); // Switch back to the original
System.out.println("Switched back to original window.");

// --- Step 12: Click on Offers link. ---
// *ASSUMED LOCATOR*
driver.findElement(By.linkText("Offers")).click();

// --- Step 13: Select Debit Card offers option from 'Select Category' drop down. ---
// *ASSUMED LOCATOR*
WebElement categoryDropdown = driver.findElement(By.id("selectCategory"));
Select select = new Select(categoryDropdown);
select.selectByVisibleText("Debit Card offers");

// --- Step 14: Click on View Offer button corresponding to "AXIS" Bank. ---
// *ASSUMED LOCATOR (XPath)*
WebElement viewOfferButton = driver.findElement(By.xpath("//td[text()='AXIS Bank']/following-sibling::td/button[text()='View Offer']"));
viewOfferButton.click();

// --- Step 15: Print the alert message in the console and accept the alert. ---
System.out.println("Handling final alert...");
Alert alert3 = driver.switchTo().alert();
String alertMsg = alert3.getText();
System.out.println("Final Alert Message: " + alertMsg);
alert3.accept();

System.out.println("\n--- Scenario Completed Successfully ---");
Enter fullscreen mode Exit fullscreen mode

}

@AfterTest
public void tearDown() {
// Ensure the browser is closed even if the script fails
if (driver != null) {
driver.quit();
}
}
}

Top comments (0)