Coe
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...