package automation_admin;

import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;

import com.Utility.MethodFactory;
import com.Utility.ReadExcel;
import com.Utility.TakeScreenshot;
import com.Utility.TestNGCreation;
import com.Utility.UtilMethods;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;

public class RT_OppCreatePage extends OpportunityElementFactory {
	static String data;
	static File file;
	static ReadExcel excel;

	public static ReadExcel excel(String excelName) {
		file = new File(System.getProperty("user.dir") + "/ExcelFiles/" + excelName + ".xlsx");
		excel = new ReadExcel(file);
		return excel;
	}
	public static WebDriver fillFieldsOnOppCreatePage(WebDriver driver, String path, ExtentTest logger, String oppName,
			String crID, String closeDt, String sellingCountryval, String localCurrencyVal,
			String IndustrySubSegmentValue, String excelName, String sheetName, int row) throws InterruptedException {
 
		excel(excelName);
		String opportunityName;
		String accountID;
		String closeDate;
		String sellingCountry;
		String localCurrency;
		String IndustrySubSegment;
 
		opportunityName = excel.getCellData(sheetName, oppName, row);
		accountID = excel.getCellData(sheetName, crID, row);
		closeDate = excel.getCellData(sheetName, closeDt, row);
 
		logger.log(LogStatus.INFO, "closeDate from excel is:" + closeDate);
 
		sellingCountry = excel.getCellData(sheetName, sellingCountryval, row);
		localCurrency = excel.getCellData(sheetName, localCurrencyVal, row);
		IndustrySubSegment = excel.getCellData(sheetName, IndustrySubSegmentValue, row);
		Thread.sleep(4000);
 
		// Setting Value for Opportunity Name field
		UtilMethods.waitTillElementIsVisible(logger, driver, opportunityNameOnCreateOppPage);
		UtilMethods.setText(logger, opportunityNameOnCreateOppPage, opportunityName);
		// Setting Value for Customer relationship field
		Thread.sleep(4000);
		UtilMethods.waitTillElementIsVisible(logger, driver, customerRelationshipOnCreateOppPage);
		Thread.sleep(4000);
		UtilMethods.setText(logger, customerRelationshipOnCreateOppPage, accountID);
		Thread.sleep(4000);
		UtilMethods.clickEnter(logger, customerRelationshipOnCreateOppPage, "Customer Relationship");
		Thread.sleep(4000);
//		UtilMethods.clickEnter(logger, customerRelationshipOnCreateOppPage, "Customer Relationship");
//		Thread.sleep(3000);
		UtilMethods.waitTillElementIsVisible(logger, driver, RT_WinLossSurveyFindingsPage.cRSelection);
		Thread.sleep(3000);
		UtilMethods.clickOn(logger, cRSelection, "CR");
		Thread.sleep(3000);
		// Setting Value for Close Date
		UtilMethods.waitTillElementIsVisible(logger, driver, closeDateOnCreateOppPage);
		Thread.sleep(3000);
		UtilMethods.setText(logger, closeDateOnCreateOppPage, closeDate);
		Thread.sleep(5000);
		JavascriptExecutor executor = (JavascriptExecutor) driver;
		WebElement element1 = driver.findElement(
				By.xpath("//label[text()='Selling Country/Location']/ancestor::lightning-combobox//input | //label[text()='Selling Country/Location']/ancestor::lightning-combobox//button[@name='SellingCountry__c']"));
		Thread.sleep(2000);
		UtilMethods.waitTillElementIsVisible(logger, driver, element1);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element1, "Selling Country");
		WebElement selectionElement = driver.findElement(By
				.xpath("//label[text()='Selling Country/Location']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ sellingCountry + "']"));
		executor.executeScript("arguments[0].click();", selectionElement);
		// local currency
		WebElement element2 = driver
				.findElement(By.xpath("//label[text()='Local Currency']/ancestor::lightning-combobox//button"));
		UtilMethods.waitTillElementIsVisible(logger, driver, element2);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element2, "Local Currency");
		WebElement selectionElement1 = driver.findElement(
				By.xpath("//label[text()='Local Currency']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ localCurrency + "']"));
		executor.executeScript("arguments[0].click();", selectionElement1);
		UtilMethods.waitTillElementIsVisible(logger, driver, industrySubSegmentOnCreateOppPage);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, industrySubSegmentOnCreateOppPage,
				"ISS");
		Thread.sleep(2000);
 
		if (IndustrySubSegment.equals("H&PS HEALTH-COMM'L PAYER")
				|| IndustrySubSegment.equals("H&PS HEALTH-COMM'L PROVIDER")) {
 
			String IndustrySubSegmentData[] = IndustrySubSegment.split("'");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(By
							.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[contains(text(),'"
									+ IndustrySubSegmentData[0] + "') and contains(text(),'" + IndustrySubSegmentData[1]
									+ "')]")),
					"industry sub segment");
 
		} else {
 
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(
							By.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[text()='"
									+ IndustrySubSegment + "']")),
					"industry sub segment");
		}
		return driver;
	}

	public static WebDriver addFinancials(WebDriver driver, String path, ExtentTest logger, String SG, String SSG,
			String SR, String SSGOff, String excelName, String sheetName, int row) throws InterruptedException {
		Thread.sleep(5000);
		excel(excelName);

		if (clearSSG.size() > 0 || deleteSSG.size() > 0) {
			//UtilMethods.clickOn(logger, ssgAddBtn, "ssgAdd Button");
			MethodFactory.clickTheRespectiveButtonByJavaScriptExecutor(driver, path, logger,
					ssgAddBtn, "SSG Add Button");	
			
			
		}
		String serviceGroup = excel.getCellData(sheetName, SG, row);
		String subServiceGroup = excel.getCellData(sheetName, SSG, row);
		String serviceRevenue = excel.getCellData(sheetName, SR, row);
		String ssgOff = excel.getCellData(sheetName, SSGOff, row);
		String[] ssgOfflist = ssgOff.split(";");

		int ssgListSize = ssgOfflist.length;
		logger.log(LogStatus.INFO, "ssgListSize " + ssgListSize);
		row = row - 1;
		// Setting Value for Service Group
		JavascriptExecutor executor = (JavascriptExecutor) driver;
		WebElement element1 = driver.findElement(
				By.xpath("(//label[text()='Service Group']/ancestor::lightning-combobox//input)[" + row + "] | (//label[text()='Service Group']/ancestor::lightning-combobox//button)[" + row + "]"));
		Thread.sleep(2000);
		UtilMethods.waitTillElementIsVisible(logger, driver, element1);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element1, "SG");
		WebElement selectionElement1 = driver.findElement(
				By.xpath("(//label[text()='Service Group']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ serviceGroup + "'])[" + row + "]"));
		executor.executeScript("arguments[0].click();", selectionElement1);

		Thread.sleep(5000);
		// Setting Value for SSG
		WebElement element2 = driver.findElement(
				By.xpath("(//label[text()='Sub Service Group']/ancestor::lightning-combobox//input)[" + row + "] | (//label[text()='Sub Service Group']/ancestor::lightning-combobox//button)[" + row + "]"));
		Thread.sleep(2000);
		UtilMethods.clickOn(logger, element2, "SSG inbox");
		UtilMethods.waitTillElementIsVisible(logger, driver, element1);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element1, "SSG");
		List<WebElement> selectionElement2 = driver.findElements(By
				.xpath("//label[text()='Sub Service Group']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ subServiceGroup + "']"));
		executor.executeScript("arguments[0].click();", selectionElement2.get(selectionElement2.size()-1));

		Thread.sleep(5000);
		// Setting Value for Services Revenue
		WebElement element3 = driver.findElement(By
				.xpath("(//label[text()='Services Revenue']//ancestor::div[@class='field-height set-background']//input)["
						+ row + "] | (//label[text()='Services Revenue']//ancestor::div[@class='field-height set-background']//button)["
						+ row + "]"));
		UtilMethods.waitTillElementIsVisible(logger, driver, srTextBox);
		UtilMethods.setText(logger, element3, serviceRevenue);

		Thread.sleep(5000);
		// Setting Value for SSG Offerings
		if(!ssgOfflist[0].equals("NA")) {
			for (int i = 0; i < ssgListSize; i++) {
				logger.log(LogStatus.INFO, "ssgOfflist " + ssgOfflist[i]);
				logger.log(LogStatus.INFO, "row " + row);
				Thread.sleep(5000);
				String SSGOff1 = ssgOfflist[i];

				WebElement element4 = driver.findElement(By
						.xpath("(//span[text()='SSG Offerings']//ancestor::div[@class='slds slds-form-element large']//input)["
								+ row + "] | (//span[text()='SSG Offerings']//ancestor::div[@class='slds slds-form-element large']//button)["
								+ row + "]"));
				Thread.sleep(5000);
				UtilMethods.clickOn(logger, element4, "element4");		
				UtilMethods.setText(logger, element4, SSGOff1);		
				logger.log(LogStatus.INFO, "row " + row);
				Thread.sleep(5000);
				UtilMethods.clickEnter(logger, element4, "ssgTextBox");
				UtilMethods.waitTillElementIsVisible(logger, driver, element4);
				Thread.sleep(4000);
			}
		}
		return driver;
	}

	public static WebDriver updateSSGOfferings(WebDriver driver, String path, ExtentTest logger, String SSGOff,
			String excelName, String sheetName, int row) throws InterruptedException {

		Thread.sleep(5000);
		excel(excelName);
		String ssgOff = excel.getCellData(sheetName, SSGOff, row);
		logger.log(LogStatus.INFO, "ssgOfflist " + ssgOff);
		String[] ssgOfflist = ssgOff.split(";");

		int ssgListSize = ssgOfflist.length;
		logger.log(LogStatus.INFO, "ssgListSize " + ssgListSize);
		row = row - 1;

		// Setting Value for SSG Offerings
		for (int i = 0; i < ssgListSize; i++) {
			logger.log(LogStatus.INFO, "ssgOfflist " + ssgOfflist[i]);
			logger.log(LogStatus.INFO, "row " + row);

			String SSGOff1 = ssgOfflist[i];

			WebElement element4 = driver.findElement(By
					.xpath("(//span[text()='SSG Offerings']//ancestor::div[@class='slds slds-form-element large']//input)["
							+ row + "]"));
			Thread.sleep(5000);
			//UtilMethods.clickOn(logger, element4, "element4");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element4, "element4");
			UtilMethods.setText(logger, element4, SSGOff1);
			logger.log(LogStatus.INFO, "row " + row);
			Thread.sleep(5000);
			UtilMethods.clickEnter(logger, element4, "ssgTextBox");
			Thread.sleep(4000);
		}
		return driver;
	}

	public static WebDriver navigateToOppCreatePage(WebDriver driver, String path, ExtentTest logger)
			throws InterruptedException {

		Thread.sleep(4000);
		MethodFactory.clickTheRespectiveButtonByJavaScriptExecutor(driver, path, logger, Opptab, "Opp Tab" );
		Thread.sleep(3000);
		UtilMethods.waitTillElementIsVisible(logger, driver, newButton);
		Thread.sleep(3000);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver,logger, newButton, "New Button" );

		
		Thread.sleep(5000);
		return driver;

	}

	public static WebDriver deleteTheSSG(WebDriver driver, String path, ExtentTest logger, String excelName,
			String sheetName, int row) throws InterruptedException {

		List<WebElement> delSSG = driver
				.findElements(By.xpath("//button[@title='Delete SSG']//following::button[@name='3']"));

		if (delSSG.size() == 1) {
			UtilMethods.clickOn(logger, delSSG.get(0), "deleteSSGbtn");
			logger.log(LogStatus.PASS, "Last Record Deleted");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "deleteTheSSG");
			logger.log(LogStatus.FAIL, "Last Record is not deleted" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		Thread.sleep(2000);
		UtilMethods.clickOn(logger, oKButtonSubmitForApproval, "oKButtonSubmitForApproval");
		Thread.sleep(2000);

		return driver;
	}

	public static WebDriver updateTheRevenue(WebDriver driver, String path, ExtentTest logger, String SR,
			String excelName, String sheetName, int row) throws InterruptedException {

		WebElement errorBox = driver.findElement(By.xpath(
				"//div[text()='ERROR: Invalid Revenue']//ancestor::div[@class='field-height set-background']//input"));

		String serviceRevenue = excel.getCellData(sheetName, SR, row);

		UtilMethods.clickOn(logger, errorBox, "errorBox");
		UtilMethods.setText(logger, errorBox, serviceRevenue);

		return driver;
	}

	public static WebDriver updateTheSG(WebDriver driver, String path, ExtentTest logger, String SG, String excelName,
			String sheetName, int row) throws InterruptedException {

		String serviceGrp = excel.getCellData(sheetName, SG, row);

		// Setting Value for Service Group
		JavascriptExecutor executor = (JavascriptExecutor) driver;
		Thread.sleep(2000);
		WebElement selectionElement1 = driver.findElement(
				By.xpath("(//label[text()='Service Group']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ serviceGrp + "'])[4]"));
		executor.executeScript("arguments[0].click();", selectionElement1);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, selectionElement1, "SG");
		Thread.sleep(5000);

		return driver;
	}

	public static WebDriver updateRevenueAfterDQCFilled(WebDriver driver, String path, ExtentTest logger, String SR,
			String excelName, String sheetName, int row) throws InterruptedException {

		WebElement inbox = driver.findElement(By.xpath("//div[@class='field-height set-background']//input"));

		String serviceRevenue = excel.getCellData(sheetName, SR, row);

		UtilMethods.clickOn(logger, inbox, "inbox");
		UtilMethods.setText(logger, inbox, serviceRevenue);

		return driver;
	}

	public static WebDriver includeMultipleISS(WebDriver driver, String path, ExtentTest logger,
			String IndustrySubSegmentValue, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		excel(excelName);
		Thread.sleep(4000);
		 
		

		UtilMethods.waitTillElementIsVisible(logger, driver, industrySubSegmentOnCreateOppPage);
		int rowcount = excel.getColumnRowCount(sheetName, IndustrySubSegmentValue);

		rowcount = rowcount + 2;
		logger.log(LogStatus.INFO, "row count  " + rowcount);
		for (int i = 2; i < rowcount; i++) {
			String IndustrySubSegment = excel.getCellData(sheetName, IndustrySubSegmentValue, i);
			//extra added
			System.out.println("picklist count "+ rowcount);
			
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, industrySubSegmentOnCreateOppPage,
					IndustrySubSegment);
			Thread.sleep(2000);
			logger.log(LogStatus.INFO, "fieldValue " + IndustrySubSegment);

			if (IndustrySubSegment.equals("H&PS HEALTH-COMM'L PAYER")
					|| IndustrySubSegment.equals("H&PS HEALTH-COMM'L PROVIDER")) {

				String IndustrySubSegmentData[] = IndustrySubSegment.split("'");
				UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
						driver.findElement(By
								.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[contains(text(),'"
										+ IndustrySubSegmentData[0] + "') and contains(text(),'"
										+ IndustrySubSegmentData[1] + "')]")),
						"industry sub segment");

			} else {

				UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
						driver.findElement(By
								.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[text()='"+ IndustrySubSegment + "']")),
						"industry sub segment");
			}
		}
		return driver;
	}

	public static WebDriver createOppFromCR(WebDriver driver, String path, ExtentTest logger, String oppName,
			String closeDt,String sellingCountryval, String localCurrencyVal, String IndustrySubSegmentValue, String excelName, String sheetName,
			int row) throws InterruptedException {

		excel(excelName);

		String opportunityName;
		String closeDate;
		String localCurrency;
		String sellingCountry;
		String IndustrySubSegment;

		opportunityName = excel.getCellData(sheetName, oppName, row);
		closeDate = excel.getCellData(sheetName, closeDt, row);
		localCurrency = excel.getCellData(sheetName, localCurrencyVal, row);
		sellingCountry = excel.getCellData(sheetName, sellingCountryval, row);
		IndustrySubSegment = excel.getCellData(sheetName, IndustrySubSegmentValue, row);

		UtilMethods.waitTillElementIsVisible(logger, driver, oppRelatedList);
		//UtilMethods.clickOn(logger, oppRelatedList, "oppRelatedList is clicked");
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, oppRelatedList, "oppRelatedList is clicked");
		Thread.sleep(5000);

		UtilMethods.waitTillElementIsVisible(logger, driver, newButton1);
		UtilMethods.clickOn(logger, newButton1, "newButton is clicked");
		Thread.sleep(5000);

		UtilMethods.waitTillElementIsVisible(logger, driver, opportunityNameOnCreateOppPage);
		UtilMethods.setText(logger, opportunityNameOnCreateOppPage, opportunityName);
		Thread.sleep(5000);

		JavascriptExecutor executor = (JavascriptExecutor) driver;

		WebElement element2 = driver
				.findElement(By.xpath("//label[text()='Local Currency']/ancestor::lightning-combobox//button"));
		UtilMethods.waitTillElementIsVisible(logger, driver, element2);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element2, "Local Currency");
		WebElement selectionElement1 = driver.findElement(
				By.xpath("//label[text()='Local Currency']//ancestor::div[1]//div[@role='listbox']//span/span[text()='" + localCurrency + "']"));
		executor.executeScript("arguments[0].click();", selectionElement1);
		UtilMethods.waitTillElementIsVisible(logger, driver, closeDateOnCreateOppPage);
		UtilMethods.setText(logger, closeDateOnCreateOppPage, closeDate);
		
	
		WebElement element1 = driver.findElement(
				By.xpath("//label[text()='Selling Country/Location']/ancestor::lightning-combobox//input | //label[text()='Selling Country/Location']/ancestor::lightning-combobox//button[@name='SellingCountry__c']"));
		Thread.sleep(2000);
		UtilMethods.waitTillElementIsVisible(logger, driver, element1);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element1, "Seling Country");
		WebElement selectionElement = driver.findElement(By
				.xpath("//label[text()='Selling Country/Location']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ sellingCountry + "']"));
		executor.executeScript("arguments[0].click();", selectionElement);
		
		Thread.sleep(5000);
		UtilMethods.waitTillElementIsVisible(logger, driver, industrySubSegmentOnCreateOppPage);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, industrySubSegmentOnCreateOppPage,
				"ISS");
		Thread.sleep(5000);
		
	
		if (IndustrySubSegment.equals("H&PS HEALTH-COMM'L PAYER")
				|| IndustrySubSegment.equals("H&PS HEALTH-COMM'L PROVIDER")) {

			String IndustrySubSegmentData[] = IndustrySubSegment.split("'");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(By
							.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[contains(text(),'"
									+ IndustrySubSegmentData[0] + "') and contains(text(),'" + IndustrySubSegmentData[1]
									+ "')]")),
					"industry sub segment");

		} else {

			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(
							By.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[text()='"
									+ IndustrySubSegment + "']")),
					"industry sub segment");
		}

		/*UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, industrySubSegmentOnCreateOppPage,
				"ISS");*/
				
		
		
			return driver;
	}
    // new method for close date
	public static WebDriver createOppFromCRDate(WebDriver driver, String path, ExtentTest logger, String oppName,
			String closeDt, String localCurrencyVal, String IndustrySubSegmentValue, String excelName, String sheetName,
			int row) throws InterruptedException {

		excel(excelName);

		String opportunityName;
		String closeDate;
		String localCurrency;
		String IndustrySubSegment;

		opportunityName = excel.getCellData(sheetName, oppName, row);
		closeDate = excel.getCellData(sheetName, closeDt, row);
		localCurrency = excel.getCellData(sheetName, localCurrencyVal, row);
		IndustrySubSegment = excel.getCellData(sheetName, IndustrySubSegmentValue, row);

		UtilMethods.waitTillElementIsVisible(logger, driver, oppRelatedList);
		//UtilMethods.clickOn(logger, oppRelatedList, "oppRelatedList is clicked");
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, oppRelatedList, "oppRelatedList is clicked");
		Thread.sleep(5000);

		UtilMethods.waitTillElementIsVisible(logger, driver, newButton1);
		UtilMethods.clickOn(logger, newButton1, "newButton is clicked");
		Thread.sleep(5000);

		UtilMethods.waitTillElementIsVisible(logger, driver, opportunityNameOnCreateOppPage);
		UtilMethods.setText(logger, opportunityNameOnCreateOppPage, opportunityName);
		Thread.sleep(5000);

		JavascriptExecutor executor = (JavascriptExecutor) driver;

		WebElement element2 = driver
				.findElement(By.xpath("//label[text()='Local Currency']/ancestor::lightning-combobox//button"));
		UtilMethods.waitTillElementIsVisible(logger, driver, element2);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element2, "Local Currency");
		WebElement selectionElement1 = driver.findElement(
				By.xpath("//label[text()='Local Currency']//ancestor::div[1]//div[@role='listbox']//span/span[text()='" + localCurrency + "']"));
		executor.executeScript("arguments[0].click();", selectionElement1);
		
		
		Thread.sleep(5000);
		UtilMethods.waitTillElementIsVisible(logger, driver, industrySubSegmentOnCreateOppPage);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, industrySubSegmentOnCreateOppPage,
				"ISS");
		Thread.sleep(5000);
		
	
		if (IndustrySubSegment.equals("H&PS HEALTH-COMM'L PAYER")
				|| IndustrySubSegment.equals("H&PS HEALTH-COMM'L PROVIDER")) {

			String IndustrySubSegmentData[] = IndustrySubSegment.split("'");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(By
							.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[contains(text(),'"
									+ IndustrySubSegmentData[0] + "') and contains(text(),'" + IndustrySubSegmentData[1]
									+ "')]")),
					"industry sub segment");

		} else {

			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(
							By.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[text()='"
									+ IndustrySubSegment + "']")),
					"industry sub segment");
		}

		
				
		UtilMethods.waitTillElementIsVisible(logger, driver, closeDateOnCreateOppPage);
		UtilMethods.setText(logger, closeDateOnCreateOppPage, closeDate);
		//closeDateOnCreateOppPage.sendKeys(Keys.ENTER);
		
		UtilMethods.clickEnter(logger, closeDateOnCreateOppPage, "Validate error msg");
			return driver;
	}
	
	public static WebDriver updateOppName(WebDriver driver, String path, ExtentTest logger, String oppName,
			String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);
		
		String opportunityName = excel.getCellData(sheetName, oppName, row);
		opportunityNameOnCreateOppPage.clear();
		
		// Setting Value for Opportunity Name field
		UtilMethods.waitTillElementIsVisible(logger, driver, opportunityNameOnCreateOppPage);
		UtilMethods.setText(logger, opportunityNameOnCreateOppPage, opportunityName);
		return driver;
	}

	public static WebDriver updateCR(WebDriver driver, String path, ExtentTest logger, String crID, String excelName,
			String sheetName, int row) throws InterruptedException {

		UtilMethods.waitTillElementIsVisible(logger, driver, clearCR);
		//check click function
		//UtilMethods.clickOn(logger, clearCR, "clearCR is done");
		MethodFactory.clickTheRespectiveButtonByJavaScriptExecutor(driver, path, logger,
				clearCR, "CR is cleared");
		//
		
		MethodFactory.refreshPg(driver);
		Thread.sleep(3000);
		String accountID = excel.getCellData(sheetName, crID, row);

		UtilMethods.waitTillElementIsVisible(logger, driver, customerRelationshipOnCreateOppPage);
		UtilMethods.setText(logger, customerRelationshipOnCreateOppPage, accountID);
		Thread.sleep(3000);

//		UtilMethods.clickEnter(logger, customerRelationshipOnCreateOppPage, "Customer Relationship");
//		Thread.sleep(4000);
		UtilMethods.clickEnter(logger, customerRelationshipOnCreateOppPage, "Customer Relationship");
		Thread.sleep(10000);
		UtilMethods.clickOn(logger, cRSelection, "CR");
		UtilMethods.clickOn(logger, selectButton, "Select");
		Thread.sleep(3000);

		return driver;
	}
	public static WebDriver updateNewCR(WebDriver driver, String path, ExtentTest logger, String crID, String excelName,
			String sheetName, int row, String sellingCountryval, String IndustrySubSegmentValue) throws InterruptedException {

		UtilMethods.waitTillElementIsVisible(logger, driver, clearCR);
		//check click function
		//UtilMethods.clickOn(logger, clearCR, "clearCR is done");
		MethodFactory.clickTheRespectiveButtonByJavaScriptExecutor(driver, path, logger,
				clearCR, "CR is cleared");
		//
		String IndustrySubSegment;
		String sellingCountry;
		
		Thread.sleep(3000);
		String accountID = excel.getCellData(sheetName, crID, row);
		sellingCountry = excel.getCellData(sheetName, sellingCountryval, row);
		IndustrySubSegment = excel.getCellData(sheetName, IndustrySubSegmentValue, row);
	

		UtilMethods.waitTillElementIsVisible(logger, driver, customerRelationshipOnCreateOppPage);
		UtilMethods.setText(logger, customerRelationshipOnCreateOppPage, accountID);
		Thread.sleep(3000);

		UtilMethods.clickEnter(logger, customerRelationshipOnCreateOppPage, "Customer Relationship");
//		UtilMethods.waitTillElementIsVisible(logger, driver, RT_WinLossSurveyFindingsPage.cRSelection);
//		UtilMethods.clickOn(logger, cRSelection, "CR");
		Thread.sleep(10000);
		UtilMethods.clickOn(logger, cRSelection, "CR");
		UtilMethods.clickOn(logger, selectButton, "Select");
		Thread.sleep(3000);
		
		JavascriptExecutor executor = (JavascriptExecutor) driver;
				
		WebElement element1 = driver.findElement(
				By.xpath("//label[text()='Selling Country/Location']/ancestor::lightning-combobox//input | //label[text()='Selling Country/Location']/ancestor::lightning-combobox//button[@name='SellingCountry__c']"));
		Thread.sleep(2000);
		UtilMethods.waitTillElementIsVisible(logger, driver, element1);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, element1, "Seling Country");
		WebElement selectionElement = driver.findElement(By
				.xpath("//label[text()='Selling Country/Location']//ancestor::div[1]//div[@role='listbox']//span/span[text()='"
						+ sellingCountry + "']"));
		executor.executeScript("arguments[0].click();", selectionElement);
		
		Thread.sleep(5000);
		UtilMethods.waitTillElementIsVisible(logger, driver, industrySubSegmentOnCreateOppPage);
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, industrySubSegmentOnCreateOppPage,
				"ISS");
		Thread.sleep(5000);
		
	
		if (IndustrySubSegment.equals("H&PS HEALTH-COMM'L PAYER")
				|| IndustrySubSegment.equals("H&PS HEALTH-COMM'L PROVIDER")) {

			String IndustrySubSegmentData[] = IndustrySubSegment.split("'");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(By
							.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[contains(text(),'"
									+ IndustrySubSegmentData[0] + "') and contains(text(),'" + IndustrySubSegmentData[1]
									+ "')]")),
					"industry sub segment");

		} else {

			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
					driver.findElement(
							By.xpath("//span[text()='Industry Sub Segment']/../../following-sibling::div//div[text()='"
									+ IndustrySubSegment + "']")),
					"industry sub segment");
		}
		Thread.sleep(3000);

		return driver;
	}
	

	public static WebDriver updateDQCResponse(WebDriver driver, String path, ExtentTest logger, String headingQues,
			String response, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {
		excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, headingQues);
		rowcount = rowcount + 2;
		logger.log(LogStatus.INFO, "row count  " + rowcount);
		for (int i = 2; i < rowcount; i++) {
			String headingValue = excel.getCellData(sheetName, headingQues, i);
			String selection = excel.getCellData(sheetName, response, i);

			WebElement field1 = driver.findElement(By
					.xpath("//div[@c-oppcreatedqclineitem_oppcreatedqclineitem]//span[text()='" + headingValue + "']"));
			
			String strXpath = "//div[@c-oppcreatedqclineitem_oppcreatedqclineitem]//span[text()='" + headingValue + "']";
			WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(1000));

			WebElement element=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(strXpath)));

			UtilMethods.verifyElementPresent(logger, driver, driver.findElements(By.xpath(strXpath)));
		
			((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
			UtilMethods.clickOn(logger, element, "textValue" + headingValue);
			Thread.sleep(2000);
			
			// Selecting Response
			WebElement selectionTxt = driver.findElement(By.xpath("//slot//div[text()='" + selection + "']"));

			//UtilMethods.clickOn(logger, selectionTxt, "selection");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, selectionTxt, "selection");
		}
		return driver;
	}

	// Validations
	

	public static WebDriver validateDQCResult(WebDriver driver, String path, ExtentTest logger, String excelName,
			String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {
             excel(excelName);
		if (weakResult.size() > 0) {
			logger.log(LogStatus.PASS, " Deliverability is weak.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateDQCResult");
			logger.log(LogStatus.FAIL, "Deliverability is not weak. " + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		int ans = notAnswered.size();
		if (ans == 10) {
			logger.log(LogStatus.PASS, "8 not answered, 2 headings are blank");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateDQCResult");
			logger.log(LogStatus.FAIL, " Answers not marked properly" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		if (overallResult.size() == 1) {
			logger.log(LogStatus.PASS, "Overall Result is blank");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateDQCResult");
			logger.log(LogStatus.FAIL, " Overall Result is not marked properly" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validateAttriPerField(WebDriver driver, String path, ExtentTest logger,
			String attrNameValue, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {
excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, attrNameValue);
		
	//	UtilMethods.clickOn(logger, editLink, "editLink");
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, editLink,
				"Edit% Link");
		Thread.sleep(3000);
		List<WebElement> inputValues = driver
				.findElements(By.xpath("//div[@class='slds-modal__content editCard']//div[@lightning-input_input]//input[@aria-label]|//div[@class='slds-modal__content editCard']//div[2]/lightning-input"));
		int values = inputValues.size();
		logger.log(LogStatus.INFO, " Values " + values);
		logger.log(LogStatus.INFO, " rowcount " + rowcount);
	
		Thread.sleep(3000);
		if (rowcount == values) {
			logger.log(LogStatus.PASS, "Value is correct.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "updateAttriPerc");
			logger.log(LogStatus.FAIL, "Value is not correct." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateAttributePerc(WebDriver driver, String path, ExtentTest logger,
			String attrNameValue, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(5000);
excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, attrNameValue);
		rowcount = rowcount + 2;
		logger.log(LogStatus.INFO, "row count  " + rowcount);
		for (int i = 2; i < rowcount; i++) {

			String attrName = excel.getCellData(sheetName, attrNameValue, i);
			logger.log(LogStatus.INFO, " attrName " + attrName);
			List<WebElement> inputValues = driver
					.findElements(By.xpath("//span[text()='" + attrName + "']//following::span[text()=' 50% ']"));
			logger.log(LogStatus.INFO, " inputValues " + inputValues);
			if (inputValues.size() > 0) {
				logger.log(LogStatus.PASS, "% Value is correct.");
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateAttributePerc");
				logger.log(LogStatus.FAIL, "% Value is not correct." + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}

		}
		return driver;
	}

	public static WebDriver validateErrorMsg(WebDriver driver, String path, ExtentTest logger, String errorMsg,
			String excelName, String sheetName, int row) throws InterruptedException {
 
		excel(excelName);
		Thread.sleep(2000);
	
		String ErrorMsg;
		ErrorMsg = excel.getCellData(sheetName, errorMsg, row);
//		MethodFactory.clickTheRespectiveButtonByJavaScriptExecutor(driver, path, logger,
//				saveAndContinueButtonOnOppCreatePage, "saveAndContinueButtonOnOppCreatePage");
		driver.manage().window().maximize();
		List<WebElement> errorMessage1 = driver.findElements(By.xpath("//span[contains(text(),'" + ErrorMsg + "')]|//div[text()='"+ErrorMsg + "']"));
		//WebElement errorMessage1 = driver.findElement(By.xpath("//span[contains(text(),'" + ErrorMsg + "')]"));
		
		int size = errorMessage1.size();
 
		logger.log(LogStatus.INFO, "size " + size);
 
		if (size > 0) {// || createPage > 0 ){
			logger.log(LogStatus.PASS, "Proper error msg is displayed:" +ErrorMsg);
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Opp Create Function");
			logger.log(LogStatus.FAIL, "Error msg is not displayed correctly" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
 
	return driver;
	}
 
	public static WebDriver validateErrorMsgOnSave(WebDriver driver, String path, ExtentTest logger, String errorMsg,
			String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);
		Thread.sleep(2000);
		//UtilMethods.clickOn(logger, saveAndContinueButtonOnOppCreatePage, "saveAndContinueButtonOnOppCreatePage clicked");
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, saveAndContinueButtonOnOppCreatePage, "saveAndContinueButtonOnOppCreatePage");
		Thread.sleep(1000);
		String ErrorMsg;
		ErrorMsg = excel.getCellData(sheetName, errorMsg, row);

//		List<WebElement> errorMessage1 = driver.findElements(By.xpath("//span[contains(text(),'" + ErrorMsg + "')]"));
//
//		int size = errorMessage1.size();

		List<WebElement> errorMessage1 = driver.findElements(By.xpath("//span[contains(text(),'" + ErrorMsg + "')]"));
		Thread.sleep(3000);
		int size = errorMessage1.size();
		
		logger.log(LogStatus.INFO, "size " + size);
		
		if (size > 0) {// || createPage > 0 ){
			logger.log(LogStatus.PASS, "Opportunity is not created.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Opp Create Function");
			logger.log(LogStatus.FAIL, "Opportunity is created." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}
	
	public static WebDriver validatError(WebDriver driver, String path, ExtentTest logger, String errorMsg,
			String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);
		Thread.sleep(2000);
		//UtilMethods.clickOn(logger, saveAndContinueButtonOnOppCreatePage, "saveAndContinueButtonOnOppCreatePage clicked");
	//	UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, saveAndContinueButtonOnOppCreatePage, "saveAndContinueButtonOnOppCreatePage");
		Thread.sleep(1000);
		String ErrorMsg;
		ErrorMsg = excel.getCellData(sheetName, errorMsg, row);

		//List<WebElement> errorMessage1 = driver.findElements(By.xpath("//span[contains(text(),'" + ErrorMsg + "')]"));
		List<WebElement> errorMessage1 = driver.findElements(By.xpath("//div[@class='viewport' and @aria-hidden='false' ]//div[contains(@class,'active')]//span[contains(text(),'" + ErrorMsg + "')]]"));
		int size = errorMessage1.size();

		logger.log(LogStatus.INFO, "size " + size);
		
		if (size > 0) {// || createPage > 0 ){
			logger.log(LogStatus.PASS, "Opportunity is not created.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Opp Create Function");
			logger.log(LogStatus.FAIL, "Opportunity is created." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validateDQCResultAfterOppCreation(WebDriver driver, String path, ExtentTest logger,
			String delValue, String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);

		String ErrorMsg;
		Thread.sleep(5000);

		int size = grayResult.size();

		String deliverability = excel.getCellData(sheetName, delValue, row);

		Thread.sleep(3000);
		if (size == 3) {
			logger.log(LogStatus.PASS, "DQC is correct on created Opportunity.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Opp Create Function");
			logger.log(LogStatus.FAIL, "DQC is not correct on created Opportunity." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		List<WebElement> delvalue = driver.findElements(By.xpath("//table//td//img[@alt='" + deliverability + "']"));

		if (delvalue.size() == 1) {
			logger.log(LogStatus.PASS, "DQC Value is correct on created Opportunity.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Opp Create Function");
			logger.log(LogStatus.FAIL,
					"DQC Value is not correct on created Opportunity." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validateRevenue(WebDriver driver, String path, ExtentTest logger, String ssgValue,
			String revenueValue, String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);

		Thread.sleep(5000);

		String ssg = excel.getCellData(sheetName, ssgValue, row);
		String revenue = excel.getCellData(sheetName, revenueValue, row);

		List<WebElement> totRevenue = driver
				.findElements(By.xpath("//a[text()='" + ssg + "']//ancestor::tr//span[text()='" + revenue + "']"));

		if (totRevenue.size() == 1) {
			logger.log(LogStatus.PASS, "Revenue is correct on created Opportunity.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateRevenue");
			logger.log(LogStatus.FAIL, "Revenue is not correct on created Opportunity." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateErrorMsgForRevenue(WebDriver driver, String path, ExtentTest logger,
			String errorMsg, String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);

		String ErrorMsg;
		Thread.sleep(3000);
		ErrorMsg = excel.getCellData(sheetName, errorMsg, row);

		List<WebElement> errorMessage1 = driver.findElements(By.xpath("//div[text()='" + ErrorMsg + "']"));

		int size = errorMessage1.size();

		if (size > 0) {
			logger.log(LogStatus.PASS, "Revenue is not correct.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Revenue is correct.");
			logger.log(LogStatus.FAIL, "Revenue is correct." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validateSaveBtnEnabled(WebDriver driver, String path, ExtentTest logger, String excelName,
			String sheetName, int row) throws InterruptedException {

		List<WebElement> btnSize = driver.findElements(By.xpath("//button[text()='Save & Continue']"));
		int size = btnSize.size();

		if (size > 0) {
			logger.log(LogStatus.PASS, "Save Button is enabled");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateSaveBtnEnabled");
			logger.log(LogStatus.FAIL, "Save Button is Disabled" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validateSaveBtnDisabled(WebDriver driver, String path, ExtentTest logger, String excelName,
			String sheetName, int row) throws InterruptedException {

		List<WebElement> btnSize = driver
				.findElements(By.xpath("//button[@disabled]//following::button[text()='Save & Continue']"));
		int size = btnSize.size();

		if (size > 0) {
			logger.log(LogStatus.PASS, "Button Disabled");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateSaveBtnDisabled");
			logger.log(LogStatus.FAIL, "Button enabled" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validateNumberOfSSGsCanBeAdded(WebDriver driver, String path, ExtentTest logger)
			throws InterruptedException {
		for (int i = 1; i < 4; i++) {
			if (ssgAddBtn.isEnabled()) {
				Thread.sleep(2000);
				UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, ssgAddBtn, "ssgAddBtn");
				logger.log(LogStatus.INFO, "Clicked " + i);
				Thread.sleep(2000);
				Actions mouseHover = new Actions(driver);
				mouseHover.moveToElement(cancelButtonInEditFinancialPage);
			}
		}

		Thread.sleep(3000);
		if (ssgAddButton.size() > 0) {
			TS = TakeScreenshot.CaptureScreen(driver, "Add Button is present");
			logger.log(LogStatus.FAIL, "Add Button is still present" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		} else {

			logger.log(LogStatus.PASS, "Add Button is not present");
			S_ASSERT.assertTrue(true);
		}

		Thread.sleep(2000);
		UtilMethods.clickOn(logger, delete2ndSSG, "deleteSSG");
		Thread.sleep(2000);
		UtilMethods.clickOn(logger, oKButtonSubmitForApproval, "oKButtonSubmitForApproval");
		Thread.sleep(2000);

		if (ssgAddButton.size() == 1) {
			logger.log(LogStatus.PASS, "Add Button is present");
			S_ASSERT.assertTrue(true);

		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Add Button is not present");
			logger.log(LogStatus.FAIL, "Add Button is not present" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateMessageOnPg2(WebDriver driver, String path, ExtentTest logger, String textMsg,
			String excelName, String sheetName, int row) throws InterruptedException {

		Thread.sleep(10000);

		UtilMethods.clickOn(logger, previousStepButton, "previousStepButton");
		String txtMsg = excel.getCellData(sheetName, textMsg, row);

		List<WebElement> text = driver.findElements(By.xpath("//div[text()='" + txtMsg + "']"));

		if (text.size() == 1) {
			logger.log(LogStatus.PASS, "Correct Message is present");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateMessageOnPg2");
			logger.log(LogStatus.FAIL, "Correct Message is not present" + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}

		return driver;
	}

	public static WebDriver validatePlaceholderText(WebDriver driver, String path, ExtentTest logger, String FieldName,
			String FieldValue, String FieldName2, String FieldValue2, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, FieldName);
		String fieldValue2 = excel.getCellData(sheetName, FieldValue2, row);
		String fieldName2 = excel.getCellData(sheetName, FieldName2, row);
		rowcount = rowcount + 2;

		for (int i = 2; i < rowcount; i++) {
			String fieldValue = excel.getCellData(sheetName, FieldValue, i);
			String fieldName = excel.getCellData(sheetName, FieldName, i);

			List<WebElement> text = driver.findElements(By.xpath(
					"//label[text()='" + fieldName + "']//ancestor::div//input[@placeholder='" + fieldValue + "']|//label[text()='" + fieldName + "']//ancestor::div//div[text()='" + fieldValue + "']|//div[text()='" + fieldValue + "']"));
			int size = text.size();

			if (size == 1) {
				logger.log(LogStatus.PASS, "Placeholder Text is Present as expected in " + fieldName);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "Placeholder Text is not as expected.");
				logger.log(LogStatus.FAIL,
						"Placeholder Text is not as expected." + fieldName + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}

		List<WebElement> text2 = driver.findElements(By.xpath(
				"//span[text()='" + fieldName2 + "']//ancestor::div//input[@placeholder='" + fieldValue2 + "']|//div[text()='" + fieldValue2 + "']"));
		int size = text2.size();

		if (size == 1) {
			logger.log(LogStatus.PASS, "Placeholder Text is Present as expected in " + fieldName2);
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Placeholder Text is not as expected.");
			logger.log(LogStatus.FAIL,
					"Placeholder Text is not as expected." + fieldName2 + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateCRName(WebDriver driver, String path, ExtentTest logger, String CRName,
			String excelName, String sheetName, int row) throws InterruptedException {
 
		excel(excelName);
 
		String crName = excel.getCellData(sheetName, CRName, row);
 
		List<WebElement> crname = driver.findElements(By.xpath("//input[contains(@placeholder,'" + crName + "')]"));
		int size = crname.size();
 
		if (size == 1) {
			logger.log(LogStatus.PASS, "CR is Present as expected.");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "CR is not as expected.");
			logger.log(LogStatus.FAIL, "CR is not as expected." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
 
		return driver;
	}
	

	public static WebDriver validateOppInRelaetdList(WebDriver driver, String path, ExtentTest logger, String oppName,
			String excelName, String sheetName, int row) throws InterruptedException {

		excel(excelName);

		String OppName = excel.getCellData(sheetName, oppName, row);

		UtilMethods.waitTillElementIsVisible(logger, driver, oppRelatedList);
		//UtilMethods.clickOn(logger, oppRelatedList, "oppRelatedList is clicked");
		UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, oppRelatedList, "oppRelatedList is clicked");
		Thread.sleep(5000);
		
		List<WebElement> OppNameInRL = driver.findElements(By.xpath("//a[text()='" + OppName + "']|//a//span/slot[text()='" + OppName + "']"));
		Thread.sleep(5000);
		int size = OppNameInRL.size();
     System.out.println(size);
		if (size > 0) {
			logger.log(LogStatus.PASS, "Opp is Present as expected.");
			S_ASSERT.assertTrue(true);
		} else {
			UtilMethods.clickOn(logger, oppColumnonCR, "opp column on CR is clicked");
			List<WebElement> OppNameInRL1 = driver.findElements(By.xpath("//a[text()='" + OppName + "']"));
			Thread.sleep(5000);
			int size1 = OppNameInRL1.size();
			System.out.println(size1);
			if (size1 > 0) {
				logger.log(LogStatus.PASS, "Opp is Present as expected.");
				S_ASSERT.assertTrue(true);
			} else {
			TS = TakeScreenshot.CaptureScreen(driver, "Opp is not present.");
			logger.log(LogStatus.FAIL, "Opp is not present as expected." + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}}

		return driver;
	}

	public static WebDriver validateFieldsOnPage1(WebDriver driver, String path, ExtentTest logger, String fieldNames,
			String ISS, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		excel(excelName);
		logger.log(LogStatus.INFO, "Validating fields function");
		Thread.sleep(5000);
		int rowcount = excel.getColumnRowCount(sheetName, fieldNames);
		rowcount = rowcount + 2;

		logger.log(LogStatus.INFO, "rowcount " + rowcount);
		
		Thread.sleep(7000);
		for (int i = 2; i < rowcount; i++) {
			String fieldValue = excel.getCellData(sheetName, fieldNames, i);

			List<WebElement> fields = driver.findElements(
					By.xpath("(//div[@class='slds-p-horizontal_medium']//label[text()='" + fieldValue + "'])[1]"));

			if (fields.size() == 1) {
				logger.log(LogStatus.PASS, "Field is visible on UI " + fieldValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateFieldsOnPage1" + fieldValue);
				logger.log(LogStatus.FAIL, "Field is not visible on UI " + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}

		String ISSfield = excel.getCellData(sheetName, ISS, row);
		List<WebElement> fields = driver
				.findElements(By.xpath("//div[@class='slds-p-horizontal_medium']//span[text()='" + ISSfield + "']"));
		if (fields.size() > 0) {
			logger.log(LogStatus.PASS, "ISS Field is visible on UI ");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateFieldsOnPage1");
			logger.log(LogStatus.FAIL, "Field is not visible on UI " + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateFieldsOnPage2(WebDriver driver, String path, ExtentTest logger, String fieldNames,
			String fieldName2, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(3000);
		excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, fieldNames);
		rowcount = rowcount + 2;

		for (int i = 2; i < rowcount; i++) {
			String fieldValue = excel.getCellData(sheetName, fieldNames, i);

			List<WebElement> fields = driver.findElements(
					By.xpath("//div[@class='slds-p-horizontal_medium']//label[text()='" + fieldValue + "']"));

			if (fields.size() > 0) {
				logger.log(LogStatus.PASS, "Field is visible on UI " + fieldValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateFieldsOnPage2" + fieldValue);
				logger.log(LogStatus.FAIL, "Field is not visible on UI " + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}
		String fieldValue2 = excel.getCellData(sheetName, fieldName2, row);
		List<WebElement> field2 = driver
				.findElements(By.xpath("//div[@class='slds-p-horizontal_medium']//span[text()='" + fieldValue2 + "']"));

		if (field2.size() > 0) {
			logger.log(LogStatus.PASS, "Field is visible on UI " + fieldValue2);
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateFieldsOnPage2" + fieldValue2);
			logger.log(LogStatus.FAIL, "Field is not visible on UI " + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateAstrikOnFields(WebDriver driver, String path, ExtentTest logger, String fieldNames,
			String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, fieldNames);
		rowcount = rowcount + 2;

		for (int i = 2; i < rowcount; i++) {
			String fieldValue = excel.getCellData(sheetName, fieldNames, i);

			List<WebElement> fields = driver
					.findElements(By.xpath("//abbr[text()='*']//following::label[text()='" + fieldValue + "']|//div[.//abbr[text()='*']]//label[text()='" + fieldValue + "']"));
			Thread.sleep(2000);
			if (fields.size() > 0) {
				logger.log(LogStatus.PASS, " * is visible on UI " + fieldValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateAstrikOnFields" + fieldValue);
				logger.log(LogStatus.FAIL, "* is not visible on UI " + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}
		return driver;
	}
	public static WebDriver validateTextOnISS(WebDriver driver, String path, ExtentTest logger, String textISS,
			String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		String fieldValue = excel.getCellData(sheetName, textISS, row);
		List<WebElement> fields = driver.findElements(By.xpath("//input[@placeholder='" + fieldValue + "']|//div[text()='" + fieldValue + "']"));

		if (fields.size() == 1) {
			logger.log(LogStatus.PASS, "Correct Text is visible on UI for ISS");
			System.out.print("Correct Text is visible on UI for ISS");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "textOnISS");
			logger.log(LogStatus.FAIL, " Text is not visible on UI " + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}
	public static WebDriver validateTextOnPage2(WebDriver driver, String path, ExtentTest logger, String textPage2,
			String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(15000);
		excel(excelName);
		String textValue = excel.getCellData(sheetName, textPage2, row);
		List<WebElement> fields = driver.findElements(By.xpath("//div[text()='" + textValue + "']|//p[contains(text(),'" + textValue + "')]"));

		if (fields.size() == 1) {
			logger.log(LogStatus.PASS, " Correct Text is visible on UI on Page 2");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnPage2");
			logger.log(LogStatus.FAIL, "Correct Text is not visible on UI " + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateFieldsDisabled(WebDriver driver, String path, ExtentTest logger,
			String NumDisabledField, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(5000);
		excel(excelName);
		int size = disabledFields.size();

		String fieldValue = excel.getCellData(sheetName, NumDisabledField, row);

		int num = Integer.parseInt(fieldValue);

		if (size == num) {
			logger.log(LogStatus.PASS, "All required fields are disabled on Size Page while returning");
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateFieldsDisabled");
			logger.log(LogStatus.FAIL, "Fields are not disabled " + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}


	public static WebDriver validateHelpTextOnPage1(WebDriver driver, String path, ExtentTest logger, String fieldName,
			String helpTxt, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		excel(excelName);
		int rowcount = excel.getColumnRowCount(sheetName, helpTxt);
		rowcount = rowcount + 2;

		for (int i = 2; i < rowcount; i++) {
			String fieldValue = excel.getCellData(sheetName, helpTxt, i);
			String fieldNames = excel.getCellData(sheetName, fieldName, i);

			String strXpath = "//label[text()='" + fieldNames + "']//ancestor::div[@class='field-height']//lightning-helptext";
			WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(1000));

			WebElement element=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(strXpath)));

			UtilMethods.verifyElementPresent(logger, driver, driver.findElements(By.xpath(strXpath)));
		
			((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
			UtilMethods.clickOn(logger, element, "Field Name Clicked");
			Thread.sleep(2000);
			List<WebElement> fields = driver.findElements(By.xpath("//div[text()='" + fieldValue + "']"));
		

			if (fields.size() > 0) {
				logger.log(LogStatus.PASS, "Expected Help Text is Present " + fieldValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateHelpTextOnOpps");
				logger.log(LogStatus.FAIL,
						"Expected Help Text is not Present " + fieldValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}
		return driver;
	}	
	
	public static WebDriver validateThePageName(WebDriver driver, String path, ExtentTest logger, String pageName,
			String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		excel(excelName);

		String pgName = excel.getCellData(sheetName, pageName, row);

		List<WebElement> page = driver.findElements(By.xpath("//li[contains(@aria-label,'" + pgName + "Current.')]|//li[contains(@aria-label,'Current.')]"));
		logger.log(LogStatus.INFO, "Page Name is correct " + page);
        System.out.println("Page Name is correct" +page);
        if (page.size() == 1) {
			logger.log(LogStatus.PASS, "Page Name is correct" + pgName);
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateThePageName");
			logger.log(LogStatus.FAIL, "Page Name is not correct " + pgName + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

	public static WebDriver validateTextOnQualifyPg(WebDriver driver, String path, ExtentTest logger,
			String headingQues, String secondaryQues, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(15000);
		excel(excelName);

		int rowcount = excel.getColumnRowCount(sheetName, headingQues);
		rowcount = rowcount + 2;
		logger.log(LogStatus.INFO, "rowcount " + rowcount);
		for (int i = 2; i < rowcount; i++) {

			String textValue = excel.getCellData(sheetName, headingQues, i);
			List<WebElement> fields = driver.findElements(
					By.xpath("//div[@c-oppcreatedqclineitem_oppcreatedqclineitem]//span[text()='" + textValue + "']"));

			if (fields.size() == 1) {
				logger.log(LogStatus.PASS, " Correct headingQues is visible on UI on Qualify Page" + textValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg");
				logger.log(LogStatus.FAIL,
						"Correct headingQues is not visible on UI " + textValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}

		int rowcount2 = excel.getColumnRowCount(sheetName, secondaryQues);
		rowcount2 = rowcount2 + 2;

		for (int i = 2; i < rowcount2; i++) {

			String textValue = excel.getCellData(sheetName, secondaryQues, i);
			List<WebElement> fields = driver.findElements(
					By.xpath("//div[@c-oppcreatedqclineitem_oppcreatedqclineitem]//span[text()='" + textValue + "']"));

			if (fields.size() == 1) {
				logger.log(LogStatus.PASS, " Correct secondaryQues is visible on UI on Qualify Page" + textValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg - secondaryQues");
				logger.log(LogStatus.FAIL,
						"Correct secondaryQues is not visible on UI " + textValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}
		return driver;
	}

	public static WebDriver validateResponseTextForDQC(WebDriver driver, String path, ExtentTest logger,
			String headingQues, String responseHeading, String strong, String moderate, String weak, String excelName,
			String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(10000);
		excel(excelName);

		int rowcount = excel.getColumnRowCount(sheetName, headingQues);
		rowcount = rowcount + 2;

		for (int i = 2; i < rowcount; i++) {

			String headingValue = excel.getCellData(sheetName, headingQues, i);
			String responseValue = excel.getCellData(sheetName, responseHeading, i);
			String strongValue = excel.getCellData(sheetName, strong, i);
			String moderateValue = excel.getCellData(sheetName, moderate, i);
			String weakvalue = excel.getCellData(sheetName, weak, i);

			WebElement field1 = driver.findElement(By
					.xpath("//div[@c-oppcreatedqclineitem_oppcreatedqclineitem]//span[text()='" + headingValue + "']"));

			//UtilMethods.clickOn(logger, field1, "textValue");
			UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, field1, "textValue");
			Thread.sleep(5000);
			// Validating Response Heading
			List<WebElement> response = driver.findElements(By.xpath("//slot//div[text()='" + responseValue + "']"));
			if (response.size() == 1) {
				logger.log(LogStatus.PASS, " Correct responseHeading is visible on UI on Qualify Page " + responseValue );
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg");
				logger.log(LogStatus.FAIL,
						"Correct responseHeading is not visible on UI " + responseValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}

			// Validating Strong text
			List<WebElement> strongTxt = driver.findElements(By.xpath("//slot//div[text()='" + strongValue + "']"));
			if (strongTxt.size() == 1) {
				logger.log(LogStatus.PASS, " Correct strongTxt is visible on UI on Qualify Page " + strongValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg");
				logger.log(LogStatus.FAIL,
						"Correct strongTxt is not visible on UI " + strongValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}

			// Validating Moderate Text
			List<WebElement> modTxt = driver.findElements(By.xpath("//slot//div[text()='" + moderateValue + "']"));
			if (modTxt.size() == 1) {
				logger.log(LogStatus.PASS, " Correct modTxt is visible on UI on Qualify Page " + moderateValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg");
				logger.log(LogStatus.FAIL,
						"Correct modTxt is not visible on UI " + moderateValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}

			// Validating Weak text

			logger.log(LogStatus.INFO, "Weak value " + weakvalue);
			if (weakvalue.equals(
					"The client's budget and pricing expectations are not in line with the price we are proposing. We are not confident we can shift their expectations.")) {

				String weakData[] = weakvalue.split("'");

				logger.log(LogStatus.INFO, "Weak value 1 " + weakData[0]);
				logger.log(LogStatus.INFO, "Weak value 2 " + weakData[1]);

				List<WebElement> fields = driver.findElements(By.xpath("//slot//div[contains(text(),'" + weakData[0]
						+ "') and contains(text(),'" + weakData[1] + "')]"));

				if (fields.size() == 1) {
					logger.log(LogStatus.PASS, " Correct weakvalue is visible on UI on Qualify Page" + weakvalue);
					S_ASSERT.assertTrue(true);
				} else {
					TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg");
					logger.log(LogStatus.FAIL,
							"Correct weakvalue is not visible on UI " + weakvalue + logger.addScreenCapture(TS));
					S_ASSERT.assertTrue(false);
				}
			} else {
				List<WebElement> weakTxt = driver.findElements(By.xpath("//slot//div[text()='" + weakvalue + "']"));
				if (weakTxt.size() == 1) {
					logger.log(LogStatus.PASS, " Correct weakvalue is visible on UI on Qualify Page");
					S_ASSERT.assertTrue(true);
				} else {
					if(weakvalue.equals(
							"The client has a negative view of our services, we are not well differentiated, and/or has had a bad experience with our work in the past. Or, we do not know.")) {
					List<WebElement> weakTxt1 = driver.findElements(By.xpath("//slot//div[contains(text(),'The client has a negative view of our services, we are not well differentiated, and/or has had a bad experience with our work in the past.')]"));
					if (weakTxt1.size() == 1) {
						logger.log(LogStatus.PASS, " Correct weakvalue is visible on UI on Qualify Page" + weakvalue);
						S_ASSERT.assertTrue(true);}}
					else{
					TS = TakeScreenshot.CaptureScreen(driver, "validateTextOnQualifyPg");
					logger.log(LogStatus.FAIL,
							"Correct weakvalue is not visible on UI " + weakvalue + logger.addScreenCapture(TS));
					S_ASSERT.assertTrue(false);
					}
				}
			}
		}
		Thread.sleep(5000);
		return driver;
	}

	public static WebDriver validateHeadingsOnQualifyPg(WebDriver driver, String path, ExtentTest logger,
			String heading, String overallHeading, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(25000);
		excel(excelName);

		int rowcount = excel.getColumnRowCount(sheetName, heading);
		System.out.println(rowcount);
		rowcount = rowcount + 2;
		logger.log(LogStatus.INFO, "The size of rowcount is: " + rowcount);
		for (int i = 2; i < rowcount; i++) {

			String textValue = excel.getCellData(sheetName, heading, i);
			List<WebElement> fields = driver
					.findElements(By.xpath("//div[@class='overallContainer']//h2[text()='" + textValue + "']"));
            System.out.println(fields.size());
			if (fields.size() == 1) {
				logger.log(LogStatus.INFO, "The size of fields is: " + fields.size());
				logger.log(LogStatus.PASS, " Correct Heading is visible on Qualify Page" + textValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateHeadingsOnQualifyPg");
				logger.log(LogStatus.FAIL,
						"Correct Heading is not visible on Qualify Page " + textValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}

		String textValue = excel.getCellData(sheetName, overallHeading, 2);
		List<WebElement> fields = driver
				.findElements(By.xpath("//div[@class='overallContainer']//span[text()='" + textValue + "']"));

		if (fields.size() == 1) {
			logger.log(LogStatus.PASS, " Correct overallHeading is visible on Qualify Page" + textValue);
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateHeadingsOnQualifyPg" + textValue);
			logger.log(LogStatus.FAIL,
					"Correct overallHeading is not visible on Qualify Page " + textValue + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}
	
	public static WebDriver addISSafterOppCreate(WebDriver driver, String path, ExtentTest logger,
			String issValue, String overallHeading, String excelName, String sheetName, int row)
			throws InterruptedException, EncryptedDocumentException, InvalidFormatException, IOException {

		Thread.sleep(25000);
		excel(excelName);

		int rowcount = excel.getColumnRowCount(sheetName, issValue);
		
		for (int i = 0; i < rowcount; i++) 
		{

			String textValue = excel.getCellData(sheetName, issValue, i);
			List<WebElement> fields = driver
					.findElements(By.xpath("//div[@class='overallContainer']//h2[text()='" + textValue + "']"));

			if (fields.size() == 1) {
				logger.log(LogStatus.PASS, " Correct Heading is visible on Qualify Page" + textValue);
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateHeadingsOnQualifyPg");
				logger.log(LogStatus.FAIL,
						"Correct Heading is not visible on Qualify Page " + textValue + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
		}

		String textValue = excel.getCellData(sheetName, overallHeading, 2);
		List<WebElement> fields = driver
				.findElements(By.xpath("//div[@class='overallContainer']//span[text()='" + textValue + "']"));

		if (fields.size() == 1) {
			logger.log(LogStatus.PASS, " Correct overallHeading is visible on Qualify Page" + textValue);
			S_ASSERT.assertTrue(true);
		} else {
			TS = TakeScreenshot.CaptureScreen(driver, "validateHeadingsOnQualifyPg" + textValue);
			logger.log(LogStatus.FAIL,
					"Correct overallHeading is not visible on Qualify Page " + textValue + logger.addScreenCapture(TS));
			S_ASSERT.assertTrue(false);
		}
		return driver;
	}

    //Created by Neeraja
	public static WebDriver CreateDuplicateTab(WebDriver driver, ExtentTest logger) throws InterruptedException {

		String currentURL = driver.getCurrentUrl();
		((JavascriptExecutor) driver).executeScript("window.open('" + currentURL + "');");
		Thread.sleep(2000);
		logger.log(LogStatus.PASS, "Duplicate tab is created");
		System.out.println("Duplicate tab is created");
		return driver; 
	}
		//Created by Neeraja
		public static WebDriver validateArrowsEnabled(WebDriver driver, String path, ExtentTest logger,
				WebElement forwardArrow,WebElement BackwardArrow, String sheetName, int row) throws InterruptedException {

			if(forwardArrow.isEnabled() && BackwardArrow.isEnabled()) {	
				logger.log(LogStatus.PASS, "Both Arrows are enabled" );
				S_ASSERT.assertTrue(true);
			}
			else {
				String TS = TakeScreenshot.CaptureScreen(driver, "Both Arrows are not present");
				logger.log(LogStatus.FAIL, "Both Arrows are not present" + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);	 
			}
			return driver;
		}
	
		//Created by Neeraja
		public static WebDriver validateCRDisabled(WebDriver driver, String path, ExtentTest logger, String excelName,
				String sheetName, int row) throws InterruptedException {

			List<WebElement> btnSize = driver
					.findElements(By.xpath("//button[@disabled]//following::label[text()='Customer Relationship']"));
			int size = btnSize.size();

			if (size > 0) {
				logger.log(LogStatus.PASS, "CR field Disabled");
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "validateCRFieldDisabled");
				logger.log(LogStatus.FAIL, "CR field enabled" + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}
			return driver;
		}

		public static WebDriver validateOnsaveMsg(WebDriver driver, String path, ExtentTest logger,
				String errorMsg, String excelName, String sheetName, int row) throws InterruptedException {

			excel(excelName);

			String ErrorMsg;
			Thread.sleep(3000);
			ErrorMsg = excel.getCellData(sheetName, errorMsg, row);

			List<WebElement> errorMessage1 = driver.findElements(By.xpath("//div[text()='" + ErrorMsg + "']"));

			int size = errorMessage1.size();

			if (size > 0) {
				logger.log(LogStatus.PASS, "On-save validation is present");
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "On-save validation is not present");
				logger.log(LogStatus.FAIL, "On-save validation is not present" + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}

			return driver;
		}
		public static WebDriver RemoveISS(WebDriver driver, String path, ExtentTest logger, String excelName,
				String sheetName, int row) throws InterruptedException {

			List<WebElement> removeISS= driver
					.findElements(By.xpath("//span[contains(@aria-label,'remove')]"));

			if (removeISS.size() == 1) {
				UtilMethods.clickOn(logger, removeISS.get(0), "Remove ISS");
				logger.log(LogStatus.PASS, "ISS values deleted");
				S_ASSERT.assertTrue(true);
			} else {
				TS = TakeScreenshot.CaptureScreen(driver, "Remove ISS");
				logger.log(LogStatus.FAIL, "ISS is not deleted" + logger.addScreenCapture(TS));
				S_ASSERT.assertTrue(false);
			}

            return driver;
		}

	
		public static WebDriver ValidateISSIsBlank(WebDriver driver, String path, ExtentTest logger,
				String charAttribute,String excelName, String sheetName, int row)
						throws InterruptedException, IOException, EncryptedDocumentException, InvalidFormatException {
					excel(excelName);
					int rowCount = excel.getColumnRowCount(sheetName, charAttribute);
					
					System.out.println("rowCount is "+rowCount);
					logger.log(LogStatus.INFO, "Total number of rows:" + rowCount);
					MethodFactory.clickTheRespectiveButtonByJavaScriptExecutor(driver,  path, logger,
							rt_OpportunityClonePage.attributesLinkOnOppPage, "Attributes page");
					Thread.sleep(2000);
					MethodFactory.switchBetweenTabs(driver, path, logger, 1);
					
					UtilMethods.waitTillElementIsVisible(logger, driver, cancelButtonOnAttributePage);

					for (int i = 0; i < rowCount; i++) {
						String charAttributeData = excel.getCellData(sheetName, charAttribute, row);
					    String CategoryVar=null;
					    
						//For finding the category name we are writing this If condition
						if (charAttributeData.equalsIgnoreCase("Industry Offerings")||charAttributeData.equalsIgnoreCase("Industry Sub Segment")) {
							CategoryVar="Industry";
							System.out.println("CategoryVar is "+CategoryVar);
						}else if (charAttributeData.equalsIgnoreCase("Accenture Products, Platforms & Assets")||charAttributeData.equalsIgnoreCase("Alliances")||charAttributeData.equalsIgnoreCase("Blockchain")||charAttributeData.equalsIgnoreCase("CEO & Enterprise Strategy")||charAttributeData.equalsIgnoreCase("Cloud")||charAttributeData.equalsIgnoreCase("Data & AI")||charAttributeData.equalsIgnoreCase("Mergers & Acquisitions")||charAttributeData.equalsIgnoreCase("Metaverse")||charAttributeData.contains("SSG")) {
							
							CategoryVar="Cross Services";
							System.out.println("CategoryVar is "+CategoryVar);
						}else if (charAttributeData.equalsIgnoreCase("Industry X")||charAttributeData.equalsIgnoreCase("Song")||charAttributeData.equalsIgnoreCase("Security")){
							
							CategoryVar="Services";
							System.out.println("CategoryVar is "+CategoryVar);
						}else if (charAttributeData.equalsIgnoreCase("CFO & Enterprise Value")||charAttributeData.equalsIgnoreCase("Supply Chain & Operations")||charAttributeData.equalsIgnoreCase("Talent & Organization")||charAttributeData.equalsIgnoreCase("Tech Strategy & Advisory")||charAttributeData.equalsIgnoreCase("Sustainability Services")){
							
							CategoryVar="Enterprise Functions";
							System.out.println("CategoryVar is "+CategoryVar);
						}else if (charAttributeData.equalsIgnoreCase("Solutions")||charAttributeData.equalsIgnoreCase("Assets")){	
							
							CategoryVar="Solutions & Assets";
							System.out.println("CategoryVar is "+CategoryVar);
						}
						
			            String strXpath1 = "//div[text()='" + CategoryVar+ "']";

						UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger,
								driver.findElement(By.xpath(strXpath1)), CategoryVar);
						
						if (ExpandAllButton.size()==1) {
							UtilMethods.clickTheRespectiveButtonByJavaScriptExecutor(driver, logger, ExpandAllButton.get(0),
									charAttributeData + " Expand All");	
							Thread.sleep(3000);
						}
						
   List<WebElement> crossIconAttributePage1 = driver.findElements(By.xpath(
			"//div[contains(text(),'" +charAttributeData+ "')]/preceding-sibling::lightning-icon/ancestor::details//span[contains(@class,'remove')]"));
					
	if (crossIconAttributePage1.size() ==0) {
      logger.log(LogStatus.PASS, "ISS values deleted");
		S_ASSERT.assertTrue(true);
	} else {
		TS = TakeScreenshot.CaptureScreen(driver, "Attribute is present");
		logger.log(LogStatus.FAIL, "Attribute is present" + logger.addScreenCapture(TS));
		S_ASSERT.assertTrue(false);
	}}
    return driver;
   
    		
}
		public static WebDriver validateSellingCountryValue(WebDriver driver, String path, ExtentTest logger,
				String fieldValue,String excelName, String sheetName, int row) throws InterruptedException {
 
			excel(excelName);
 
			String fieldValueData = excel.getCellData(sheetName, fieldValue, row);
		
			WebElement SellingCountry1 = driver.findElement(By.xpath("//label[text()='Selling Country/Location']//ancestor::lightning-picklist//span[contains(text(),'" + fieldValueData+ "')]"));
        String UIValue = SellingCountry1.getText();
 
 
			if (UIValue.equals(fieldValueData)) {
				String TS = TakeScreenshot.CaptureScreen(driver, "validateSellingCountryFieldValue");
				logger.log(LogStatus.PASS, "Field Value is as expected:--excel data is:--"
						+ fieldValueData + "---UI Data is :--" + SellingCountry1.getText()
						+ logger.addScreenCapture(TS));
				System.out.println("PASS--->Field Value is as expected:--excel data is:--"
						+ fieldValueData + "---UI Data is :--" + SellingCountry1.getText()+"---");
 
				S_ASSERT.assertTrue(true);
			} else {
				
				 logger.log(LogStatus.FAIL,
			                "Field value is not as expected: --excel data is:--"
			                        + fieldValueData + "---UI Data is :--" + SellingCountry1.getText()
			                        + logger.addScreenCapture(TS));
			        System.out.println("Fail--->Field Value is not as expected:--:--excel data is:--"
			                + fieldValueData + "---UI Data is :--" + SellingCountry1.getText() + "---");
 
				S_ASSERT.assertTrue(false);
			}
 
			return driver;
		}}