Untitled

mail@pastecode.io avatar
unknown
abap
2 years ago
6.2 kB
4
Indexable
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();
		}
	}
}