Coe
unknown
abc
3 years ago
6.5 kB
11
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...