SF

""

Automation Test UI with Selenium WebDriver

 Automation Test UI with Selenium WebDriver


I. Đối tượng

 - Bất cứ ai có định hướng về Automation QA.

II. Mục tiêu khóa học

- Ôn tập cơ bản về Java (Bạn nào chưa vững, chưa biết Java sẽ được tham dự vào lớp Basic Java, lớp này học tùy chọn miễn phí. Sẽ học vào sáng CN 10h30-12h30).

- Giới thiệu tổng quan về Selenium
    + Các component trong Selenium
    + Kiến trúc Selenium WebDriver
    +...

- Cài đặt Java & Selenium. Setup Maven project

- Các kỹ thuật xác đinh locator
    + Các kỹ thuật cơ bản để xác định locator: id, class, name, tag, link text, partial link text, xpat, css
    + Nested text
    + XPath Axes
    + Xác định locators bằng cách sử dụng Siblings Xpath
    + Cách duyệt từ phần tử con sang phần tử cha bằng Xpath

- Các kỹ thuật xử lý các thành phần web ( web element)
    + Xử lý Checkboxes & Drop downs
    + Xử lý các loại Alerts/Popups
    + Xử lý các loại Alerts/Popups
    + Xử lý Web Tables
    + Mouse Events
    + Keyboard Events, Scrolling Page
    + Upload file(s) trong Selenium
    + Capture Screenshots
    + Headless Browser
    + ...

Synchronization trong Selenium WebDriver: phân biệt và cách áp dụng từng loại Wait trong Selenium: Implicit Wait, Explicit Wait, Fluent Wait.

- Áp dụng design pattern vào project: POM & Page Factory

- TestNG framework trong Selenium
    + Annotations,Dependency Methods & Types of Assertions
    + DataProviders & Grouping
    + Parallel Testing
    + TestNG Listeners

- Run test case trên cloud testing.

- Cucumber
    + Setup dependencies cucumber vào framework và tạo các feature file
    + Tìm hiểu các regular expressions, annotations trong cucumber.
    + Implement các step definition file cho feature file
    + Cách sử dùng Tidy Gherkin Plugin

Chú ý: Trên đây là các phần chính sẽ trang bị cho các bạn. Trong quá trình học, sẽ có update thêm nhiều kiến thức chi tiết theo từng bài học. Khóa học sẽ tập trung nhiều vào thực hành, nên sau mỗi buổi học đều có phần bài tập để các bạn luyện tập, và tất nhiên là sẽ có review code cho từng bạn. 

III. Thông tin lớp học

Thời lượng: 13 buổi. Học vào tối T5 (7h-10h)

- Khai giảng lớp mới: 13/05/2023

- Tài liệu: 
- Cung cấp trong từng buổi học cho học viên.

- Học phí: - 4.000.000 vnd

- Hình thức: Học trực tiếp online qua link meeting zoom.

- Hỗ trợ giải đáp thắc mắc, giảng lại cho những bạn cần sp 1-1 (qua video call, teamviewer,...) ngoài giờ học.

- Các bạn liên hệ qua fanpage để được tư vấn: https://www.facebook.com/xomtester/



Kiểm tra xem checkbox đã được checked hay chưa ?

 Kiểm tra xem checkbox đã được 

checked hay chưa ?


Kiểm tra checkbox đã được check hay chưa?

Để kiểm tra xe một checkbox đã được checked hay chưa, chúng ta sẽ dùng hàm isSelected(). Hàm isSelected() trả về một giá trị thuộc kiểu boolean, true nếu checkbox đã được checked, ngược lại sẽ trả về giá trị false

WebElement checkbox = driver.findElement(By.id("checkboxId"));
System.out.println("The checkbox is selection state is - " + checkbox.isSelected());

Check vào checkbox nó chưa được checked

During automation, if we want to check a checkbox with click() method then the checkbox gets unchecked if its already checked. So, if you want to make sure that you are only checking the checkbox then we should first get the checkbox state using isSelected() method and then click on it only if it is in unchecked state.

Trong khi làm automation, có rất nhiều trường hợp chúng ta muốn check vào một checkbox. Do đó, nếu bạn muốn đảm bảo rằng bạn chỉ muốn check cho checkbox đó thì trước hết bạn phải biết được trạng thái hiện tại của nó là gì; bằng cách sử dụng hàm isSelected(). Nếu trạng thái hiện tại là unchecked thì lúc đó chúng ta mới check vào checkbox

WebElement checkbox = driver.findElement(By.id("checkboxId"));
//If the checkbox is unchecked then isSelected() will return false 
//and NOT of false is true, hence we can click on checkbox
if(!checkbox.isSelected())
	checkbox.click();


Xử lý drop down với Selenium Webdriver

            Drop down với Selenium

Selenium WebDriver cung cấp cho chúng ta một số cách để chọn được item trong drop down list. Ở bài này mình sẽ hướng dẫn các bạn cơ bản về việc xử lý drop down trong Selenium:

drop_list_static

Việc xử lý drop down list , sẽ dựa vào các thuộc tính value, visible text  index. 

selectByValue()

Đi vào vấn đề chính là việc xử lý drop down list trong selenium. Như đoạn HTLM ở trên, thì ta có value là một thuộc tính trong thẻ option đó là:

value="" selected="" disabled="">Please select
value="Sunday">Sunday   
value="Monday">Monday   
value="Tuesday">Tuesday   
value="Wednesday">Wednesday   
value="Thursday">Thursday   
value="Friday">Friday 
value="Saturday">Saturday

Command:

Select days = new Select(driver.findElement(By.id("select-demo")));
days.selectByValue("Tuesday")

selectByVisibleText()

Với  Visible text – thì đây chính là text hiển thị trên trang web mà ta chọn từ drop down:

Please select
Sunday   
Monday   
Tuesday   
Wednesday   
Thursday   
Friday 
Saturday

Command:

Select days = new Select(driver.findElement(By.id("select-demo")));
days.selectByVisibletext("Friday")

selectByIndex()

Còn với index thì có thể hiểu đơn giản như là ta có một mảng các option, được đánh số từ 0 cho đến hết, như ví dụ trên thì từ 0 đến 7. Index 1 tương ứng với Sunday, lần lượt index 2 tương ứng với Monday, và index 7 tương ứng với Saturday.

Command:

Select days = new Select(driver.findElement(By.id("select-demo")));
days.selectByIndex(3)

Giải thích một số hàm thường sử dụng với drop down list:

** selectByValue(String arg0) || Chọn option có thuộc tính value tương ứng với tham số truyền vào. Tham số truyền vào phải có giá trị tương ứng với giá trị của thuộc tính trong option được chọn/bỏ chọn. Và không phải lúc nào value của option cũng giống với visible text, nên là phải lưu ý tránh nhầm lẫn nha.

** selectByVisibleText(String arg0|| Chọn option có text hiển thị tương ứng với tham số truyền vào. Tham số truyền vào này phải giống 100% với text hiển thị trên drop down.

** selectByIndex(int arg0) || Chọn option theo index của option trong drop down list. Tham số truyền vào là index của option muốn select.

Bonus thêm một số hàm có thể gặp khi làm việc với drop down list:

** isMultiple() || Hàm này để kiểm tra xem drop down list đó có thể chọn được nhiều giá trị hay không, nếu có hàm sẽ trả về giá trị TRUE, ngược lại sẽ trả về FALSE, và nó không yêu cầu truyền tham số đầu vào.

** deselectAll() || Hàm này được sử dụng để hủy tất cả các option đã được select, và chỉ sử dụng đối với những drop down list cho phép chọn nhiều option.

Full code

package basic;

import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.support.ui.Select;

public class Dropdown {

public static void main(String[] args) {
 System.setProperty("webdriver.gecko.driver", "E:\\Program\\Firefox\\geckodriver.exe");
 FirefoxOptions options = new FirefoxOptions();
 options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); 
 FirefoxDriver driver = new FirefoxDriver(options);
 
 driver.get("http://www.seleniumeasy.com/test/basic-select-dropdown-demo.html");
 
 Select s = new Select(driver.findElement(By.id("select-demo")));
 s.selectByValue("Tuesday");
 s.selectByIndex(6);
 s.selectByVisibleText("Wednesday");

}
}


DragDrop trong Selenium WebDriver

 DragDrop trong Selenium WebDriver

DragDrop là một trong scenario phổ biến trong automationt test. Trong bài này, chúng ta sẽ tìm hiểu cách xử lý event dragdrop trong Selenium Webdriver bằng việc thông qua Action class

Actions trong Selenium WebDriver

Để thực hiện các hành động của người dùng như kéo và thả, chúng ta có một lớp Action trong Selenium WebDriver. Sử dụng lớp ACtion, trước tiên chúng ta xây dựng một chuỗi các sự kiện tổng hợp và sau đó thực hiện nó thông qua Action class . Các phương thức khác nhau của lớp Action mà chúng ta sẽ sử dụng ở đây là-

  • clickAndHold(WebElement element) – Clicks và giữ (không nhả chuột) một elements
  • moveToElement(WebElement element) – Di chuyển con trỏ chuột tới vị trí 1 element cần drop
  • release(WebElement element) – Nhả chuột trái 

Code xử lý DragDrop

Ví dụ:

//WebElement on which drag and drop operation needs to be performed
WebElement fromWebElement = driver.findElement(By Locator of fromWebElement);
//WebElement to which the above object is dropped
WebElement toWebElement = driver.findElement(By Locator of toWebElement);
 
//Creating an object of Actions class to build composite actions
Actions builder = new Actions(driver);
 
//Building drag and drop action
Action dragAndDrop = builder.clickAndHold(fromWebElement)
		     .moveToElement(toWebElement)
		     .release(toWebElement)
        	     .build();
//Performing the drag and drop action
dragAndDrop.perform();



iFrames / Frames trong Selenium

 iFrames / Frames trong Selenium


1. Frame là gì?

Frame có nghĩa là khung - một định dạng trong HTML dùng để sắp xếp bố cục - tạo layout và thiết kế một trang web. Frame hỗ trợ hiển thị tài liệu trên website dưới nhiều dạng khác nhau trong cùng một cửa sổ trình duyệt. 

Thẻ iFrame HTML là những inline frames được sử dụng để chèn một HTML Document bên trong một HTML Document khác.

<frameset rows = "10%,80%,10%">
	<frame id= "first" name = "top" src = "/html/top_frame.htm" />
	<frame name = "main" src = "/html/main_frame.htm" />
	<frame name = "side" src = "/html/side_frame.htm" />
</frameset>
Java

 

<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
Java

2. Tìm frame/iframe trong Selenium

Dưới đây là một số cách tìm frame/iframe:
- Dùng ID
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>

// switchong to a rame which has id as 'ifr'
driver.switchTo().frame("ifr")
Java

 

- Dùng Name
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>

// switching to a frame which has name='demo'
driver.switchTo().frame(arg0)
Java

 

- Dùng Element (được dùng nhiều nhất)
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" class='second' src="width.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" src="width.html" height="200" width="300"></iframe>

// switch to 1st frame
driver.switchTo().frame("//iframe[@src='demo.html']")
Java

 

- Dùng Index
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" class='second' src="width.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" src="width.html" height="200" width="300"></iframe>

// switch to 1st frame
driver.switchTo().frame(1)
Java


Xử lý lỗi NullPointerException trong Selenium Webdriver

Xử lý lỗi NullPointerException 

trong Selenium Webdriver


Một biến mà nó đang có giá trị là null (không trỏ đến bất kỳ object nào cả)

NullPointerException là Unchecked Exception nên compiler sẽ không giúp bạn phát hiện và báo cho bạn được, bạn phải tự xử lý.

package features;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;

public class Demo4Test {

    WebDriver driver;

    @Test
    void name() {
        driver.get("https://google.com");
    }
}




Nguyên nhân là biến 
driver đang là giá trị null, nên khi sử dụng nó sẽ bị lỗi NullPointerException.

null là giá trị mặc định của 1 biến có kiểu dữ liệu object

Cách fix là bạn cần assign object vào cho cái biến đó

@Test
void name() {
    driver = new ChromeDriver();
    driver.get("https://google.com");
}


Bất cứ lúc nào bạn gặp lỗi NullPointerException thì hãy xem dòng lỗi đó là dòng nào, biến để gọi method đã được assign object nào chưa, nếu chưa thì hãy assign


Radio button với Selenium Webdriver

 Radio button với Selenium Webdriver

Trong một nhóm các radio button, tại một thời điểm thì ta chỉ có thể chọn một radio button cho các option đó. Trong HTML, các radio button nằm tr
ong thẻ input và có attribute là Type = radio.

Các bạn có thể tham khảo ví dụ dưới đây về radio button:

Radio_btn

HTML:

Radio_btn_html

Và ta có một vài vấn đề có thể làm với radio button như sau:

  1. Xác định locator của các radio button – có thể sử dụng nhiều cách để lấy ra được locator của các element này.
  2. Kiểm tra giá trị mặc định của radio, hoặc kiểm tra xem radio đó đã được chọn hay chưa
  3. Có thể click chọn nếu như radio button này chưa được chọn, hoặc chọn một radio khác khi radio kia đã được chọn
  4. Ngoài ra, trước khi click chọn radio button, ta có thể kiểm tra xem radio button đó có enable hay không – Case này được dùng trong trường hợp đối với một vài yêu cầu sau khi đã thực hiện một vài thao tác trước đó thì mới xuất hiện radio.

Đầu tiên, xác định locator của radio button

driver.findElement(By.xpath("//input[@value = 'Female']")


Tiếp theo, kiểm tra giá trị mặc định của radio button là đã được check hay chưa bằng cách sử dụng hàm isSelected()

driver.findElement(By.xpath("//input[@value = 'Female']")).isSelected();


Kế tiếp nữa, là thực hiện click chọn radio button đó bằng cách sử dụng hàm click(), với locator đã tìm được ở bước đầu tiên:

driver.findElement(By.xpath("//input[@value = 'Female']")).click();


Với trường hợp kiểm tra xem radio button có thể select được (enable and clickable) trên ứng dụng hay không ta có thể sử dụng hàm .isEnabled() để kiểm tra.

driver.findElement(By.xpath("//input[@value = 'Female']")).isEnabled()


Ngoài ra còn có thể sử dụng hàm isDisplayed() để kiểm tra phần tử ấy có đang hiển thị hay không:

driver.findElement(By.xpath("//input[@value = 'Female']")).isDisplayed()


Run code:

package basic;package basic;
import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
public class RadioButton { public static void main(String[] args) 
{ 
 System.setProperty("webdriver.gecko.driver", "E:\\Program\\Firefox\\geckodriver.exe"); 
 FirefoxOptions options = new FirefoxOptions(); options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); 
 FirefoxDriver driver = new FirefoxDriver(options);
 driver.get("http://www.seleniumeasy.com/test/basic-radiobutton-demo.html"); System.out.println(driver.findElement(By.xpath("//input[@value = 'Female']")).isEnabled()); 
 driver.findElement(By.xpath("//input[@value = 'Female']")).click(); 
 System.out.println(driver.findElement(By.xpath("//input[@value = 'Female']")).isSelected()); 
}
}