package webdriver;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
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_14_Windows_Tab_Thaontp {
WebDriver driver;
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();
// Set thời gian chờ để tìm được element
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
public void TC_01_WindowTab_Dictionary() {
// Home
driver.get("https://dictionary.cambridge.org/vi/");
// Click đăng nhập link
driver.findElement(By.xpath("//header[@id='header']//span[text()='Đăng nhập']")).click();
sleepInSecond(3);
// Khi click business chuyển tab nhưng driver vẫn ở Homepage vì vậy cần Switch
// Switch dùng title
switchToWindowByTitle("Login");
// Click login Button
driver.findElement(By.cssSelector("input[value='Log in']")).click();
Assert.assertEquals(driver.findElement(By.xpath("//form[@id='gigya-login-form']//input[@name='username']/following-sibling::span")).getText(), "This field is required");
Assert.assertEquals(driver.findElement(By.xpath("//form[@id='gigya-login-form']//input[@name='password']/following-sibling::span")).getText(), "This field is required");
driver.findElement(By.xpath("//form[@id='gigya-login-form']//input[@name='username']")).sendKeys("automationfc.com@gmail.com");
driver.findElement(By.xpath("//form[@id='gigya-login-form']//input[@name='password']")).sendKeys("Automation000***");
sleepInSecond(2);
driver.findElement(By.cssSelector("input[value='Log in'")).click();
// Sau khi click Login nó tự close window đi và nhảy về trang trước đó ( Trang Home)
// Driver vẫn ở trang Login
// Phải Switch về trang Home
switchToWindowByTitle("Cambridge Dictionary | Từ điển tiếng Anh, Bản dịch & Từ điển từ đồng nghĩa");
sleepInSecond(3);
// Verify Login thành công
Assert.assertEquals(driver.findElement(By.cssSelector("header#header span.cdo-username")).getText(), "Automation FC");
}
@Test
public void TC_02_Techpanda_Window() {
driver.get("http://live.techpanda.org/");
// Click vào Mobile tab
driver.findElement(By.cssSelector("li.nav-1>a")).click();
sleepInSecond(3);
// Khi click bussiness chuyển tab rồi nhưng driver vẫn ở trang Home
// Switch bằng Title , gọi hàm đã lưu ra
switchToWindowByTitle("Mobile");
// Add sp Sony Xperia vào Add to Compare
driver.findElement(By.xpath("//a[@title='Sony Xperia']/parent::h2/following-sibling::div/ul/li/a[@class='link-compare']")).click();
// Verify text hiển thị sau khi Add
Assert.assertEquals(driver.findElement(By.cssSelector("ul.messages")).getText(), "The product Sony Xperia has been added to comparison list.");
// Add Samsung Galaxy
driver.findElement(By.xpath("//a[@title='Samsung Galaxy']/parent::h2/following-sibling::div/button/following-sibling::ul/li/a[@class='link-compare']")).click();
Assert.assertEquals(driver.findElement(By.cssSelector("li.success-msg")).getText(), "The product Samsung Galaxy has been added to comparison list.");
// Click button Compare
driver.findElement(By.xpath("//button[@title='Compare']")).click();
// Switch qua cửa sổ mới
switchToWindowByTitle("Products Comparison List - Magento Commerce");
// Verify title
Assert.assertEquals(driver.findElements(By.cssSelector("div.title-buttons>h1")), "Compare Products");
// Close tab và chuyển về ParentWindow
driver.findElement(By.cssSelector("//button[@title='Close Window']")).click();
// Đang lỗi chỗ này còn 3step nữa chưa làm
}
public void TC_03_Naukri_Tab() {
// Trang A
driver.get("https://www.naukri.com/");
String homePageWwindowID = driver.getWindowHandle();
System.out.println("Tab A : " + homePageWwindowID);
// Click vào Jobs link ( Trang B)
driver.findElement(By.xpath("//a[@title='Search Jobs']")).click();
sleepInSecond(3);
Set<String> allWindowIDs = driver.getWindowHandles();
// Hành vi tự nhảy qua trang Job nhưng driver vẫn ở trang A
// Trong TH chỉ có duy nhất 2tab/ window thì có thể sự dụng ID của tab/window để Switch qua
// Dùng 1 biến tạm để duyệt qua các phần tử trong Set<String>
for (String id : allWindowIDs) {
// Nếu ID nào khác với id của Homepage thì Switch qua
if(!id.equals(homePageWwindowID)) {
// Switch qua id của tab đó
driver.switchTo().window(id);
}
}
// Sau khi Switch qua
System.out.println(driver.getCurrentUrl());
}
// Viết hàm switch dùng title
// Dùng được cho cả 2 tab/ window hoặc nhiều hơn 2 đều được
public void switchToWindowByTitle(String expectTitle) {
// Lấy hết tất cả ID đang có ra
Set<String> allWindowIDs = driver.getWindowHandles();
// Dùng 1 biến tạm để duyệt qua các phần tử trong Set<String>
for (String id : allWindowIDs) {
// Switch vào trước rồi mới kiểm tra điều kiện sau]
driver.switchTo().window(id);
// Lấy title của page đó ra
String actualTitle = driver.getTitle();
if (actualTitle.equals(expectTitle)) {
// Thỏa mãn điều kiện là đúng cái page/tab mình cần thì dùng break
break;
}
}
}
@AfterClass
public void afterClass() {
driver.quit();
}
public void sleepInSecond(long second) {
try {
Thread.sleep(second * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}