Coe

 avatar
unknown
abc
2 years ago
6.5 kB
8
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.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Topic_08_Custom_Dropdown_Thaontp {
	WebDriver driver;
	WebDriverWait explicitWait;
	JavascriptExecutor jsExecutor;

	String projectPath = System.getProperty("user.dir");

	@BeforeClass
	public void beforeClass() {
		System.setProperty("webdriver.gecko.driver", projectPath + "\\browserDrivers\\geckodriver.exe");

		// Khởi tạo browser lên
		driver = new FirefoxDriver();
		// Dùng Wait thì phải New nó lênsau driver vì mình cần tham số driver để truyền
		// Wait cho các trạng thái của element : visible/ presence/ invisible/ staleness
		// Visible : Những thứ nhìn thấy được
		// Presence :
		explicitWait = new WebDriverWait(driver, 15);

		// Ép kiểu tường minh
		jsExecutor = (JavascriptExecutor) driver;

		// Wait cho việc chờ để tìm được element
		driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
		driver.manage().window().maximize();
	}

  	    public void TC_01_JQuery() {
		driver.get("http://jqueryui.com/resources/demos/selectmenu/default.html");
		selectItemInCustomDropdownList("span#number-button>span.ui-selectmenu-icon", "ul#number-menu div", "5");
		Assert.assertEquals(driver.findElement(By.cssSelector("span#number-button span.ui-selectmenu-text")).getText(),"5");

		selectItemInCustomDropdownList("span#number-button>span.ui-selectmenu-icon", "ul#number-menu div", "15");
		Assert.assertEquals(driver.findElement(By.cssSelector("span#number-button span.ui-selectmenu-text")).getText(),"15");

		selectItemInCustomDropdownList("span#number-button>span.ui-selectmenu-icon", "ul#number-menu div", "19");
		Assert.assertEquals(driver.findElement(By.cssSelector("span#number-button span.ui-selectmenu-text")).getText(),"19");
		
		selectItemInCustomDropdownList("span#number-button>span.ui-selectmenu-icon", "ul#number-menu div", "3");
		Assert.assertEquals(driver.findElement(By.cssSelector("span#number-button span.ui-selectmenu-text")).getText(),"3");

	}

	// Viết hàm để tùy chọn giá trị không phải viết lại nhiều lần code
	

	public void TC_02_React() {
		driver.get("https://react.semantic-ui.com/maximize/dropdown-example-selection/");
		
		selectItemInCustomDropdownList("i.dropdown", "div.item>span.text", "Jenny Hess");
		Assert.assertEquals(driver.findElement(By.cssSelector("div.divider.text")).getText(), "Jenny Hess");
		
		selectItemInCustomDropdownList("i.dropdown", "div.item>span.text", "Elliot Fu");
		Assert.assertEquals(driver.findElement(By.cssSelector("div.divider.text")).getText(), "Elliot Fu");
		
		selectItemInCustomDropdownList("i.dropdown", "div.item>span.text", "Christian");
		Assert.assertEquals(driver.findElement(By.cssSelector("div.divider.text")).getText(), "Christian");
		
	}
	
	
	public void TC_03_VueJs() {
		driver.get("https://mikerodham.github.io/vue-dropdowns/");
		
		selectItemInCustomDropdownList ("li.dropdown-toggle", "ul.dropdown-menu a", "Third Option");
		Assert.assertEquals(driver.findElement(By.cssSelector("li.dropdown-toggle")).getText(), "Third Option");

		selectItemInCustomDropdownList ("li.dropdown-toggle", "ul.dropdown-menu a", "Second Option");
		Assert.assertEquals(driver.findElement(By.cssSelector("li.dropdown-toggle")).getText(), "Second Option");

		selectItemInCustomDropdownList ("li.dropdown-toggle", "ul.dropdown-menu a", "First Option");
		Assert.assertEquals(driver.findElement(By.cssSelector("li.dropdown-toggle")).getText(), "First Option");

	}
	
	@Test
	public void TC_04_tiemChungVN() {
		driver.get("https://tiemchungcovid19.gov.vn/portal/register-person");
		
		selectItemInCustomDropdownList("ng-select[bindvalue='provinceCode'] span.ng-arrow-wrapper","div[role='option'] span.ng-option-label", "Thành phố Hồ Chí Minh");
		
		selectItemInCustomDropdownList("ng-select[bindvalue='provinceCode'] span.ng-arrow-wrapper","div[role='option'] span.ng-option-label", "Thành phố Hà Nội");

		selectItemInCustomDropdownList("ng-select[bindvalue='provinceCode'] span.ng-arrow-wrapper","div[role='option'] span.ng-option-label", "Tỉnh Bình Phước");

		
	}
	
	public void selectItemInCustomDropdownList(String parentLocator, String childLocator, String expectedTextItem) {
		// - Step 1: Click vào 1 element cho nó xổ hết ra các item
		driver.findElement(By.cssSelector(parentLocator)).click();
		sleepInSecond(2);

		// - Step 2: Chờ cho các item load ra hết thành công
		// Lưu ý 1 : (Locator chứa hết tất cả các item)
		// Lưu ý 2 : Locator phải đến node cuối cùng chứa text
		explicitWait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(childLocator)));
		// - Step 3: Tìm item cần chọn

		// Lấy tất cả các element(item) ra sau đó duyệt qua từng item
		List<WebElement> allItems = driver.findElements(By.cssSelector(childLocator));

		// Duyệt qua từng item getText của item ra
		for (WebElement item : allItems) {
			String actualText = item.getText();
			System.out.println("Actual Text = " + actualText);

			// Nếu text = text mình mong muốn (item cần click vào)
			if (actualText.equals(expectedTextItem)) {
				// + B1 : Nếu item cần chọn nằm ở vùng nhìn thấy thì k cần scroll tới element
				// tìm tiếp
				// + B2 : Nếu item cần chọn nằm ở dưới thì scroll tới element đến item đó
				jsExecutor.executeScript("arguments[0].scrollIntoView(true)", item);
				sleepInSecond(2);

				// - Step 4: Click vào item đó
				item.click();
				sleepInSecond(2);

				// Phải có break để thoát ra khỏi vòng lặp
				break;
			}
		}
	}

	@AfterClass
	public void afterClass() {
		driver.quit();
	}

	public void sleepInSecond(long second) {

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