Untitled

 avatar
unknown
abap
2 years ago
7.8 kB
5
Indexable
package webdriver;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Topic_09_Button_Radio_Thaontp {
	WebDriver driver;
	String projectPath = System.getProperty("user.dir");
	String osName = System.getProperty("os.name");
	JavascriptExecutor jsExecutor;

	@BeforeClass
	public void beforeClass() {
		if (osName.startsWith("WINDOWS")) {
			System.setProperty("webdriver.gecko.driver", projectPath + "\\browserDrivers\\geckodriver.exe\"");
		} else {
			System.setProperty("webdriver.gecko.driver", projectPath + "/browserDrivers/geckodriver");
		}

		// Set môi trg WINDOW
		// System.setProperty("webdriver.gecko.driver", projectPath +
		// "\\browserDrivers\\geckodriver.exe");

		// Set môi trường MAC
		// System.setProperty("webdriver.gecko.driver", "/browserDrivers/geckodriver");

		// Khởi tạo browser lên
		 driver = new FirefoxDriver();
		// Ép kiểu tường minh
		jsExecutor = (JavascriptExecutor) driver;

		// Set thời gian chờ để tìm được element
		driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		driver.manage().window().maximize();
	}

	public void TC_01_Button() {
		driver.get("https://www.fahasa.com/customer/account/create");

		// Navigate qua tag đăng nhập
		driver.findElement(By.cssSelector("li.popup-login-tab-login")).click();

		// Verify button " Đăng nhập" is Disable
		By loginButtonBy = By.cssSelector("button.fhs-btn-login");
		Assert.assertFalse(driver.findElement(loginButtonBy).isEnabled());

		// Verify button Đăng nhập có bakcground màu xám
		String loginButtonBackgroundColorRgb = driver.findElement(loginButtonBy).getCssValue("background-color");
		System.out.println("RGB color = " + loginButtonBackgroundColorRgb);

		// Convert qua mã Hexa
		// String loginButtonBackgroundColorHexa =
		// Color.fromString(loginButtonBackgroundColor).asHex();
		// System.out.println("Hexa color = " + loginButtonBackgroundColorHexa);
		// Assert.assertEquals(loginButtonBackgroundColorHexa.toUpperCase(),
		// "#636363;");

		// Input dữ liệu hợp lệ vào Email/ Password
		driver.findElement(By.cssSelector("input#login_username")).sendKeys("Automation@gmail.com");
		driver.findElement(By.cssSelector("input#login_password")).sendKeys("123456789");

		// Verify button đăng nhập là enable
		Assert.assertTrue(driver.findElement(loginButtonBy).isEnabled());

		// Verify button đăng nhập có background màu đỏ
		String loginButtonBackgroundColor = driver.findElement(loginButtonBy).getCssValue("background-color");
		System.out.println("RGB color = " + loginButtonBackgroundColor);

		// Tải lại trang
		driver.navigate().refresh();
		driver.findElement(By.cssSelector("li.popup-login-tab-login")).click();

		// Remove thông tin user và pass để test TH text yêu cầu nhập là trg bắt buộc
		jsExecutor.executeScript("arguments[0].removeAttribute('disable');", driver.findElement(loginButtonBy));

		driver.findElement(loginButtonBy).click();
	}

	public void TC_02_RadioButton() {
		driver.get("https://demos.telerik.com/kendo-ui/radiobutton/index");

		// Click Dual-zone air conditioning
		// Khai báo biến - Kiếm tra xem được chọn chưa
		By onePetrolRadio = By.xpath("//label[text()='1.8 Petrol, 118kW']/preceding-sibling::input");

		Assert.assertFalse(driver.findElement(onePetrolRadio).isSelected());
		driver.findElement(onePetrolRadio).click();
		sleepInSecond(2);
		Assert.assertTrue(driver.findElement(onePetrolRadio).isSelected());

	}

	public void TC_03_Default_Checkbox() {
		driver.get("https://demos.telerik.com/kendo-ui/checkbox/index");

		// Click button 2 Petro
		By luggageCheckbox = By.xpath("//label[text()='Luggage compartment cover']/preceding-sibling::input");
		By heatedCheckbox = By.xpath("//label[text()='Heated front and rear seats']/preceding-sibling::input");
		By leatherCheckbox = By.xpath("//label[text()='Leather trim']/preceding-sibling::input");
		By towbarCheckbox = By.xpath("//label[text()='Towbar preparation']/preceding-sibling::input");

		// Select ( Phải kiểm tra dkien trc khi click chọn)
		checkToCheckbox(luggageCheckbox);
		checkToCheckbox(heatedCheckbox);

		// Assert xem được chọn rồi hay chưa?
		Assert.assertTrue(driver.findElement(luggageCheckbox).isSelected());
		Assert.assertTrue(driver.findElement(heatedCheckbox).isSelected());
		Assert.assertTrue(driver.findElement(leatherCheckbox).isSelected());

		// Disable
		Assert.assertFalse(driver.findElement(towbarCheckbox).isEnabled());
		Assert.assertFalse(driver.findElement(leatherCheckbox).isEnabled());

		// De-select
		uncheckToCheckbox(luggageCheckbox);
		uncheckToCheckbox(heatedCheckbox);

		// Verify de-selected
		Assert.assertFalse(driver.findElement(luggageCheckbox).isSelected());
		Assert.assertFalse(driver.findElement(heatedCheckbox).isSelected());
		Assert.assertFalse(driver.findElement(towbarCheckbox).isSelected());

	}

	@Test
	public void TC_04_Multiple_Fields() {
		driver.get("https://automationfc.github.io/multiple-fields/");

		List<WebElement> checkboxes = driver.findElements(By.cssSelector("input[type='checkbox']"));
		System.out.println("Checkbox size = " + checkboxes.size());

		// Action - Selected
		for (WebElement checkbox : checkboxes) {
			if (!checkbox.isSelected())
				checkbox.click();
			sleepInMiliSecond(500);
		}

		// Verify - Selected
		for (WebElement checkbox : checkboxes) {
			Assert.assertTrue(checkbox.isSelected());
		}

		// Action - Deselected
		for (WebElement checkbox : checkboxes) {
			if (checkbox.isSelected()) {
				checkbox.click();
				sleepInMiliSecond(500);
			}

		}

		// Verify - Deslected
		for (WebElement checkbox : checkboxes) {
			Assert.assertFalse(checkbox.isSelected());
		}
	}

	public void checkToCheckbox(By by) {
		if (!driver.findElement(by).isSelected()) {
			driver.findElement(by).click();
		}
	}

	public void uncheckToCheckbox(By by) {
		if (driver.findElement(by).isSelected()) {
			driver.findElement(by).click();
		}
	}
	
	@Test
	public void TC_05_Custom_Radio() {
		driver.get("https://material.angular.io/components/radio/examples");
		
		By winterCheckboxInpput = By.cssSelector("input[value='Winter']");
		
		// Click button Summer có 3 case
		// Case 1 : Dùng thẻ input --> Not click
		// isSelected --> Work
		
		// Case 2 : Dùng thẻ span
		// Selenium click(); --> Work
		// isSelected --> Không Work
		
		// Case 3 : Dùng thẻ span để click
		// Dùng input để assert verify ( Work nhưng sẽ không tối ưu)
		// Vậy nên sẽ dùng javaScript để verify
		
		clickByJavaScript(winterCheckboxInpput);
		sleepInSecond(2);
		
		Assert.assertTrue(driver.findElement(winterCheckboxInpput).isSelected());
		
		
		
		
	}

	public void clickByJavaScript(By by) {
		jsExecutor.executeScript("arguments[0].click();", driver.findElement(by));
	} 
	
	@AfterClass
	public void afterClass() {
		driver.quit();
	}

	public void sleepInSecond(long second) {

		try {
			Thread.sleep(second * 1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public void sleepInMiliSecond(long milisecond) {

		try {
			Thread.sleep(milisecond);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
Editor is loading...