Chào các bạn đã đến với chủ đề tiếp theo của mình. Ở những chủ đề trước, mình đã giới thiệu cách open browser với Selenium WebDriver, cũng như 1 số cách xác định WebElement như id, name, cssSelector, xpath … Từ topic này trở về sau, chúng ta sẽ từng bước, từng bước 1 tìm hiểu sâu hơn về các sử dụng những hàm mà Selenium đang support.
Trong chủ đề này, mình sẽ giới thiệu 1 số hàm cơ bản của Selenium WebDriver và làm thế nào để ứng dụng chúng vào test case của bạn? Ví dụ như khi bạn bắt đầu 1 test case, việc đầu tiên là bạn phải mở browser lên, sau đó navigate tới trang web mà bạn muốn test…
Nào, chúng ta hãy bắt đầu nhé.
Nội dung
- 1. Một số hàm cơ bản của WebDriver
- 1.1. Close Browser
- 1.2. Quit Browser
- 1.3. Open new web page (URL)
- 1.4. Maximize browser
- 1.5. Navigation to URL
- 1.6. Navigate to previous page
- 1.7. Navigate to forward page
- 1.8. Refresh web page
- 1.9. Get current URL
- 1.10. Get page source (HTML code) của page hiện tại
- 1.11. Get title của page hiện tại
- 1.12. Timeouts
- 2. Ví dụ
- 3. Lời kết
1. Một số hàm cơ bản của WebDriver
1.1. Close Browser
driver.close();
Hàm này được sử dụng để close window/tab.
- Nếu browser bạn đang mở nhiều tab, thì nó sẽ close tab hiện tại bạn đang mở (đang active)
- Nếu browser chỉ mở 1 tab duy nhất, thì nó sẽ close luôn browser đó.
1.2. Quit Browser
driver.quit();
Cũng tương tự như hàm driver.close() ở trên, hàm này cũng có tác dụng close browser. Nhưng nó sẽ khác ở hàm trên 1 chút, là nếu browser bạn đang mở nhiều tab, thì nó sẽ close luôn tất cả các tab hiện tại bạn đang mở
Thêm 1 điểm khác biệt nữa là, nếu bạn nào để ý thì khi Webdriver open browser, nó sẽ chạy 1 file browser driver.exe (ví dụ như chromedriver.exe/geckodriver.exe) ở Task Manager.
Nếu bạn dùng hàm driver.close() ở trên, thì file chromedriver.exe này sẽ không được kill đi. Nên đôi lúc bạn sẽ thấy 1 đống file chromedriver.exe hiển thị ở đây. Ngược lại, với hàm driver.quit(), nó sẽ close browser, đồng thời nó sẽ kill luôn file chromedriver.exe ở Task manager
1.3. Open new web page (URL)
driver.get("https://www.facebook.com/");
Hàm này được sử dụng để open new URL.
1.4. Maximize browser
driver.manage().window().fullscreen();
hoặc
driver.manage().window().maximize();
Hai hàm này được sử dụng để mở browser full màn hình window. Tuy nhiên, nó sẽ có sự khác nhau 1 chút ở đây:
driver.manage().window().fullscreen();
- Thanh menu của browser sẽ không hiển thị
- Task bar cũng không hiển thị
- Hàm này sẽ tương ứng với phím F11 trong window. Khi dùng phím F11, browser sẽ được open full screen.
driver.manage().window().maximize();
- Thanh menu của browser vẫn hiển thị
- Task bar vẫn còn hiển thị
driver.navigate().to("url");
Hàm này sử dụng cũng tương tự như hàm driver.get(url) ở trên, nó sẽ navigate tới một url cụ thể. Nhưng điểm khác nhau ở đây là:
driver.get(url):
- Nó sẽ không lưu lịch sử trình duyệt và cookie. Do đó, bạn sẽ không click vào được 2 button forward và backward trên browser
- Và sẽ đợi cho đến khi web page được load xong
driver.navigate().to(“url”);
- Ngược với driver.get(url) ở trên, hàm này vẫn duy trì lịch sử trình duyêt và cookie. Do đó bạn sẽ sử dụng được 2 button forward và backward.
driver.navigate().back();
Hàm này được sử dụng để click vào button “back” trên browser
driver.navigate().forward();
Hàm này được sử dụng để click vào button “forward” trên browser
1.8. Refresh web page
driver.navigate().refresh();
Hàm này được sử dụng để click vào button “refresh” trên browser(F5 để refresh lại page)
1.9. Get current URL
String loginPageUrl = driver.getCurrentUrl();
Hàm này được sử dụng để get current url của page hiện tại bạn đang open.
1.10. Get page source (HTML code) của page hiện tại
String pageSource = driver.getPageSource();
Hàm này được sử dụng để get page HTML source của page hiện tại bạn đang open.
1.11. Get title của page hiện tại
String title = driver.getTitle();
Hàm này được sử dụng để get title của page hiện tại bạn đang open.
1.12. Timeouts
- Selenium 3:
// Chờ cho element được load ra thành công trong vòng 15
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
// Chờ cho page được load thành công
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
- Selenium 4
// Chờ cho element được load ra thành công trong vòng 15
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(15));
// Chờ cho page được load thành công
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(15));
2. Ví dụ
2.1. Sample test case 1: Verify current url
Test step:
- Open url: https://live.techpanda.org/
- Click to MOBILE menu
- Verify that browser will be navigated to http://live.techpanda.org/index.php/mobile.html
@Test
public void TC_01_Verify_Current_URL() {
driver.get("https://live.techpanda.org/");
// Click to Mobile menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='Mobile']")).click();
String loginPageUrl = driver.getCurrentUrl();
Assert.assertEquals(loginPageUrl, "http://live.techpanda.org/index.php/mobile.html");
}
2.2. Sample test case 2: Verify page title
Test step:
- Open url: https://live.techpanda.org/
- Click to MOBILE menu
- Verify that title of page is Mobile
- Click to menu TV
- Verify that title of page is TV
@Test
public void TC_02_Verify_Page_Title() {
driver.get("https://live.techpanda.org/");
// Click to Mobile menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='Mobile']")).click();
Assert.assertEquals(driver.getTitle(), "Mobile");
// Click to TV menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='TV']")).click();
Assert.assertEquals(driver.getTitle(), "TV");
}
Test step:
- Open url: https://live.techpanda.org/
- Click to MOBILE menu
- Verify that browser will be navigated to http://live.techpanda.org/index.php/mobile.html
- Click to menu TV
- Verify that browser will be navigated to http://live.techpanda.org/index.php/tv.html
- Back to MOBILE page
- Verify that browser will be navigated to http://live.techpanda.org/index.php/mobile.html
- Forward to TV page
- Verify that browser will be navigated to http://live.techpanda.org/index.php/tv.html
@Test
public void TC_03_Verify_Navigation() {
driver.get("https://live.techpanda.org/");
// Click to Mobile menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='Mobile']")).click();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/mobile.html");
// Click to TV menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='TV']")).click();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/tv.html");
// Back to Mobile Page
driver.navigate().back();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/mobile.html");
// Forward to TV Page
driver.navigate().forward();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/tv.html");
}
Here is full code:
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class WebElement_Basic_Command {
WebDriver driver;
@BeforeClass
public void beforeClass() {
driver = new ChromeDriver();
driver.manage().window().maximize();
}
@Test
public void TC_01_Verify_Current_URL() {
driver.get("https://live.techpanda.org/");
// Click to Mobile menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='Mobile']")).click();
String loginPageUrl = driver.getCurrentUrl();
Assert.assertEquals(loginPageUrl, "http://live.techpanda.org/index.php/mobile.html");
}
@Test
public void TC_02_Verify_Page_Title() {
driver.get("https://live.techpanda.org/");
// Click to Mobile menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='Mobile']")).click();
Assert.assertEquals(driver.getTitle(), "Mobile");
// Click to TV menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='TV']")).click();
Assert.assertEquals(driver.getTitle(), "TV");
}
@Test
public void TC_03_Verify_Navigation() {
driver.get("https://live.techpanda.org/");
// Click to Mobile menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='Mobile']")).click();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/mobile.html");
// Click to TV menu
driver.findElement(By.xpath("//div[@id='header-nav']//a[text()='TV']")).click();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/tv.html");
// Back to Mobile Page
driver.navigate().back();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/mobile.html");
// Forward to TV Page
driver.navigate().forward();
Assert.assertEquals(driver.getCurrentUrl(), "http://live.techpanda.org/index.php/tv.html");
}
@AfterClass
public void afterClass() {
driver.close();
driver.quit();
}
}
3. Lời kết
Như vậy chúng ta đã tìm hiểu qua 1 số hàm xử lý cơ bản của Selenium WebDriver. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo.