Showing posts with label SELENIUM_WEBDRIVER. Show all posts
Showing posts with label SELENIUM_WEBDRIVER. Show all posts

Topic Học Kiểm thử phần mềm tự động sẽ tiếp tục giới thiệu các lệnh về trong Selenium Webdriver.  Trong baì này, chúng ta sẽ cùng thực hành về Kéo và thả chuột từ vị trí nguồn đến vị trí đích ( Drag and Drop) 

Như các bạn đã biết, một số ứng dụng web có chức năng kéo thả một item từ nơi này đến nơi khác . Làm sao để tự động hóa chức năng này ? 

Selenium Webdriver có cung cấp lớp xử lý " Action"  nhằm xử lý các tương tác về sự kiện chuột và bàn phím như chức năng Hover , Kéo thả  đã nói ở bài trước 

Cách thức hoạt động : 
- Trước tiên nó sẽ xác định vị trí của đối tượng cần di chuyển thông qua lệnh Find Element, Sau đó lại xác định vị trí cần chuyển đến . 
- Gọi lớp Action  của Selenium Webdriver
- Sau đó gọi phương thức Build () để thực hiện hành động

Ví dụ nhé : Hãy viết 1 script thực hiện chức năng KÉO THẢ một Folder "Học kiểm thử phần mềm tự động " Sang Folder "Tài Liệu Selenium WebDriver ".

Tài liệu Selenium Webdriver

Ta lần lượt thực hiện các bước sau :

1) Đăng nhập vào Google Driver  gồm :
 - Email
- Password
- Không check remember
- Click nút đăng nhập

2) Xác định vị trí của Folder " Học Kiểm thử phần mềm tự đông "

3) Xác định vị trí của Folder " Tài liệu WebDriver"

4) Thực hiện Move " Học Kiểm thử phần mềm tự động " Sang " Tài Liệu Selenium WebDriver"

5) Kiểm tra kết quả thực hiện

Đoạn Script như sau

package Tài Liệu Selenium Webdriver Tiếng Việt ;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.interactions.Action;

import org.openqa.selenium.interactions.Actions;

public class  Học kiểm thử phần mềm tự động{


public static void main(String[] args) throws InterruptedException {

WebDriver driver = new FirefoxDriver();

// Get URL của Google driver
String URL = "https://drive.google.com/drive/my-drive";
driver.get(URL);
 // It is always advisable to Maximize the window before performing DragNDrop action - Phóng to của sổ

driver.manage().window().maximize();

//Đăng nhập gmail
// Find element Email ID sau đó điền email đã đăng ký 
driver.findElement(By.id("Email")).sendKeys("thanhsuong.py3");

//Find element password sau đó nhập password

driver.findElement(By.id("Passwd")).sendKeys("6677028@123");
WebElement checkRemember = driver.findElement(By.id("PersistentCookie"));

// Bỏ chọn Remember cookies nếu default đã chọn - Bên Firefox nhớ dai lắm, tốt nhất là không nên chọn , hjhj

if (checkRemember.isSelected() == true) {
                   checkRemember.click();
                 }
// Click đăng nhập button 
driver.findElement(By.id("signIn")).click();

// Đợi load trang
driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS);

WebElement From = driver.findElement(By.xpath
("/html/body/div[4]/div[2]/div[2]/div[2]/div/div/div[3]/div/div/div/div/div[1]/div/div/div[2]/div/div/div[1]/div/div/div/div[1]/div/div/div[2]/div/div[1]/div[2]/div[3]/div"));

WebElement To = driver.findElement(By.xpath
("/html/body/div[4]/div[2]/div[2]/div[2]/div/div/div[3]/div/div/div/div/div[1]/div/div/div[2]/div/div/div[1]/div/div/div/div[1]/div/div/div[2]/div/div[2]/div[2]/div[3]/div"));

Actions builder = new Actions(driver);

Action dragAndDrop = builder.clickAndHold(From)

.moveToElement(To)

.release(To)

.build();

dragAndDrop.perform();

}

}

Xem video : 

----------------------------
Học kiểm thử phần mềm tự động trong topic " Học Selenium Webdriver" cơ bản


Selenium WebDriver - Bài 6 -Keyboard Mouse Events , Uploading Files - Webdriver

Topic Học Kiểm thử phần mềm tự động sẽ tiếp tục giới thiệu các lệnh về trong Selenium Webdriver.  Trong baì này, chúng ta sẽ tìm hiểu cách xử lý chuột ,  bàn phím trong WebDriver  và cách xử lý file upload

Kiểm thử phần mềm tự động



Xử lý bàn phím và chuột  được thực hiện bằng cách sử dụn Advanced User Interactions API . Nó chứa các Action và Action class  cần thiết để  thực hiện các sự kiện này. Sau đây là các sự kiện bàn phím và chuột thường được sử dụng nhất được cung cấp bởi Actions class



Method
Ý nghĩa
  
clickAndHold()

Nhấp giữ chuột  tại vị trí chuột hiện tại.
contextClick()

Nhấp chuột tại vị trí hiện tại
doubleClick()

Nhấp đôi chuột
dragAndDrop(source, target)
Thực hiện nhấn và giữ ở vị trí của các thành phần nguồn, di chuyển đến vị trí của phần tử mục tiêu, sau đó nhả chuột.
tham số:
Source : Vị trí element
Target : Vị trí move chuột và thả chuột
dragAndDropBy(source, x-offset, y-offset)
Thực hiện nhấn và giữ ở vị trí của các phần tử nguồn, di chuyển và nhả chuột
tham số:
source : vị trí element
xOffset- : Vị trí ngang
yOffset-  : Vị trí dọc
keyDown(modifier_key)
Nhấn giữ phím  trong modifier_key
Modifier_key : Phím bất kỳ trên bàn phím
((Keys.ALT, Keys.SHIFT, or Keys.CONTROL)

keyUp(modifier _key)
Nhấn phím
modifier_key -  phím nhấn bất kỳ  (Keys.ALT, Keys.SHIFT, or Keys.CONTROL)
moveByOffset(x-offset, y-offset)

Move chuột từ vị trí x đến vị trí y
moveToElement(toElement)

Move chuột tới một phần tử
release()

Thả chuột tới 1 vị trí hiện tại
sendKeys(onElement, charsequence)



Một ví dụ về trường hợp Hover chuột nhé .


Mở trang web Demo : http://newtours.demoaut.com/ 
Bình thường  , khi không  Hover chuột, phần tử đó có giá trị màu cam #FFC455  , khi Hover , nó trở thành trong suốt và màu nền  sẽ hiển thị ( Màu xanh )


Kiểm thử phần mềm


Step 1 :
Import the Actions and Action classes.

import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;


Step 2 : Khởi tạo  new Actions object.

 Actions builder = new Actions(driver);
 Step 3:
Khởi tạo hành đồng cho new Actions object ở Step 2

 Action mouseOverHome = builder.moveToElement(link_Home).build();


Trong trường hợp này, chúng ta sẽ sử dụng phương thức  moveToElement (), Nó sẽ thực hiện hành động rê chuột qua đối tượng  "Home" . Dùng  build ()  để hoàn thành hành động rê chuột
Step 4:
Sử dụng phương thức perform()  khi thực thi lệnh Action ở Step 3

mouseOverHome.perform();  


Dưới đây là đoạn Script  WebDriver để kiểm tra màu nền của ô đầu tiên ở menu  trước và sau khi chuột  rê chuột

package HocKiemThuPhanMem;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;

public class HocKiemThuPhanMemPractice{

public static void main(String[] args) {

String baseUrl = "http://newtours.demoaut.com/";
        WebDriver driver = new FirefoxDriver();
      driver.get(baseUrl);      

// Lấy xpath của đối tượng cần kiểm tra
     WebElement ObjectToHover =driver.findElement(By.xpath("/html/body/div/table/tbody/tr/td[1]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[1]"));
    // Lấy màu nền của đối tượng cần kiểm tra
        String bgColorGet = ObjectToHover.getCssValue("background-color");
     
// In màu nền trước khi Hover chuột
       System.out.println("Before hover: "+bgColorGet);

// Thực hiện việc rê chuột
     Actions builder = new Actions(driver);
     Action mouseOverHome = builder
             .moveToElement(ObjectToHover)
             .build();
     mouseOverHome.perform();

// Lấy màu nền khi rê chuột
     bgColorGet = ObjectToHover.getCssValue("background-color");
   
// In màu khi rê chuột
     System.out.println("After hover: "+bgColorGet);
    driver.quit();
}
}


Thực thi đoạn Script sau đó dùng bản màu CSS để kiểm tra kết quả trả về đúng không nhé !

Kiểm thử phần mềm tự động

Qua bài sau, Bài thứ 7- Chúng ta sẽ thực hành Drag and Drop element nhé 

----------------------------
Học kiểm thử phần mềm



Bài 5 - Selenium WebDriver Wait Commands, Checkbox and Dropdown box

Topic Học Kiểm thử phần mềm tự động sẽ tiếp tục giới thiệu về các lệnh trong Selenium Webdriver.  

1) ImplicitlyWait Command

Việc tìm kiếm các yêu tố bất kỳ luôn mất 1 khoảng thời gian chờ đợi ngầm đã được thiết lập.  Dùng lệnh này để báo với Selenium rằng - Phải chờ   trong khoảng thời gian đó trước  khi ném 1 ngoại lệ rằng không tìm thấy các yếu tố trên trang.

WebDriver driver => new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));

2) FluentWait Command

Xác định thời gian chờ  tối đa  cho 1 điều kiện  cũng như tần suất để kiểm tra điều kiện . Giup cấu hình khoảng thời gian chò đợi, bỏ qua các trường hợp ngoại lệ trong quá trình chờ khi tìm kiếm 1 phần tử trên trang

 // Waiting 30 seconds for an element to be present on the page, checking

  // for its presence once every 5 seconds.

  Wait wait = new FluentWait(driver)

    .withTimeout(30, SECONDS)

    .pollingEvery(5, SECONDS)

    .ignoring(NoSuchElementException.class);

  WebElement foo = wait.until(new Function() {

    public WebElement apply(WebDriver driver) {

    return driver.findElement(By.id("foo"));

    }

   });

3) ExpectedConditions Command

Một điều kiện hợp lý được mong đợi để giá trị cuối cùng không phải là null hoặc sai(false).

WebDriverWait wait = new WebDriverWait(driver, 10);

 WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(>someid>)));


4) PageLoadTimeout Command



Thiết lập giá trị thời gian để chờ đợi cho trang web  hoàn thành tải(loadding) trước khi ném một lỗi ngoại lệ

driver.manage().timeouts().pageLoadTimeout(100, SECONDS);

5) SetScriptTimeout Command

Thiết lập thời gian chờ đợi cho một kịch bản không đồng bộ để thực hiện hoàn thành trước khi ném một lỗi. Nếu thời gian chờ là tiêu cực, sau đó kịch bản sẽ được phép chạy vô thời hạn.

driver.manage().timeouts().setScriptTimeout(100,SECONDS);

6)Sleep Command

thread.sleep(1000);

Câu lệnh này hiếm khi được sử dụng vì nó luôn luôn buộc các trình duyệt chờ đợi một thời gian cụ thể. Nếu bạn sử dụng câu lệnh này bạn có thể xác định giá trị thời gian chờ đợi cao hơn nhiều khi bạn làm các trường hợp kiểm thử.

CheckBox & Radio Button Operations
Check box và Radio button cho phép người dung lựa chọn “ Check” hoặc “ Uncheck”  .

6)By.ID method

Radio Button và Checkbok – đều có ID và Name riêng.  Selenium webdriver sẽ tìm và nhận diện mỗi checkbox thông qua phương thức By.id



WebElement radioBtn =                                                    
driver.findElement(By.id("Học kiểm thử phần mềm"));                                                                                            
 radioBtn.click()
           

7) With ‘IsSelected’

Các checkbox hoặc radio button  có thể được lựa chọn hoặc chưa được lựa chọn. Làm sao để Selenium Webdriver biết rằng nó đã được lựa chọn hay chưa ? Dùng  “IsSelected” kiểm tra checkbox / Radion button box đã được chọn chưa .
// Khai báo

 List  oRadioButton = driver.findElements(By.name("toolsqa"));

 // tạo biến với mặt định ban đầu là ko check ( false)

 boolean bValue = false;

 // Kiểm tra  radion button đo đã được check hay chưa 

 bValue = oRadioButton.get(0).isSelected();

 // Kiểm tra nếu đã được chọn ( bvalue=true

 if(bValue = true){

                // nếu radio button  đầu tiên đã  được chọn mặc định thì sẽ chọn nút radio thứ 2
                oRadioButton.get(1).click();

 }else{

                // nút radio đầu tiên sẽ được chọn Nếu nó  không được chọn mặc định thì

                oRadioButton.get(0).click();

 }

Ở ví dụ trên , Tên của các radio button/ checkboxes trong cùng group là giống nhau nhưng giá trị khác nhau. Vì vậy  nếu tìm checkbox/ radiobuton với thuộc tính name thi sẽ nhận được nhiều giá trị . Do đó ta sử dụng phương thức  findElements  và lưu trữ trong list của WebElements


8. With ‘Value’

Bạn có thể chọn nút radio button / Checkbox  với các giá trị của nó
//Tìm checkbox hoặc nút radio bằng tên(Name)
List oCheckBox = driver.findElements(By.name(“eRadio”));
//Câu lệnh lấy số checkboxes hiện tại
int iSize = oCheckBox.size();
//Bắt đầu vòng lặp từ checkbox đầu tiên đến checkbox cuối cùng
for(int i=0; i < iSize ; i++ ){
//Lưu tên checkbox là một chuỗi , sử dụng thuộc tính Value
String sValue = oCheckBox.get(i).getAttribute(“value”);
//Chọn checkbox nếu giá trị của các checkbox giống nhau
if (sValue.equalsIgnoreCase(“toolsqa”)){
oCheckBox.get(i).click();
// Thoát khỏi vòng lặp
break;
}
}

8) By ‘CssSelector’ 

: Lựa chọn một radido hoặc checkbox bằng cách sử dụng giá trị của nó


1
2
3
WebElement oCheckBox = driver.findElement(By.cssSelector("input[value='Tools QA']"));
oCheckBox.click()

9) Selecting Dropdown/Multiple Select Box

Trước khi sử dụng Dropdown box  control, ta cần phải làm 2 việc sau:
  1. Import  gói  org.openqa.selenium.support.ui.Select
  2. Khai báo "Select" object trong  WebDriver
Cú pháp Lệnh
Select oSelection = new Select(driver.findElement(By.id(id)));

10) Chọn 1 giá trị sử dụng ‘selectByVisibleText’

Dùng để chọn 1 giá trị bất kỳ  trong danh sách lựa chọn của Dropdowbox  hoặc multiple selection boxes 

Select oSelection = new Select(driver.findElement(By.id(id)));

oSelection.selectByVisibleText(text);

11) Chọn giá trị sử dụng  ‘selectByIndex’

Gần giống  selectByVisibleText nhưng sự khác biệt là cung cấp các chỉ số của giá trị tùy chọn ứng

 
Select oSelection = new Select(driver.findElement(By.id(id)));
oSelection.selectByIndex(index);

12) Chọn giá trị sử dụng ‘selectByValue’

Mỗi option trong hợp thoại lựa chọn của Drop down box / Multiple Select Box đều có một values riêng, vì vậy ta có thể chọn values ứng với giá trị của từng lựa chọn

Select oSelection = new Select(driver.findElement(By.id(id)));

oSelection.selectByValue(value)

Note: Mỗi values ứng với từng giá trị lựa chọn trong option của của Drop down box / Multiple Select Box là duy nhất

12) Getting the Size of Select item

Đôi khi bạn có thể muốn đếm các phần tử trong Dropdowbox và Multiple Select Box, ta  có thể sử dụng vòng lặp trên Select element để đếm có bao nhiu option
Select oSelection = new Select(driver.findElement(By.id(id)));
List<WebElement> oSize = oSelection.getOptions();

int iListSize = oSize.size();

13)In danh sách các Options

Một khi bạn có được kích thước của các yếu tố Select sau đó nó rất dễ dàng để in các văn bản của các tùy chọn.

Select oSelection = new Select(driver.findElement(By.id(id)));

                List oSize = oSelection.getOptions();

                int iListSize = oSize.size();

                for(int i =0; i>iListSize ; i++){

                                String sValue = oSelection.getOptions().get(i).getText();

                                System.out.println(sValue);

                                }


14. Deselect methods

Chỉ áp dụng cho Multiple Select Box . Nếu trong trường hợp bạn muốn bỏ chọn bất kỳ tùy chọn lựa chọn và có thể được thực hiện với  deselectAll (), deselectByIndex, deselectByValue và deselectByVisibletext.
Select oSelection = new Select(driver.findElement(By.id(id)));

                oSelection.deselectAll();

                oSelection.deselectByIndex(index);

                oSelection.deselectByValue(value);

                oSelection.deselectByVisibleText(text);

15. Multiple selection method

Chỉ áp dụng cho Multiple Select Box  và không phải trên List boxes or dropdowns. .
Select oSelection = new Select(driver.findElement(By.id(id)));

                oSelection.selectByIndex(index)

                oSelection.selectByIndex(index)

                // Or

                oSelection.selectByVisibleText(text)

                oSelection.selectByVisibleText(text)

                // Or

                oSelection.selectByValue(value)

                oSelection.selectByValue(value)


16)Entering Values in Input Boxes

Dùng phương thức Sendkeys để nhập giá trị cho input field

driver.FindElement (By.name(“UserName”)).sendKeys(“Hockiemthuphanmem”);

17)Deleting Values in Input Boxes

Phương thức  clear()  dung để xóa các text defaut trong Textbox.

Driver.findElement(By.name(“Username”)).Clear ();


Bài tập áp dụng cho topic " Học kiểm thử phần mềm tự động" 

1)      Đăng nhập Mantis  ( Check “Remember my login in this browser” checkbox)
2)      Chọn Project “User guide”  trong Dropdownbox “ Project ”
3)      Chọn Report  Issues
4)      Lần lượt Chọn / Nhập giá trị vào các field  ( attach image)
5)      Click Submit
Học kiểm thử phần mềm tự động


Học kiểm thử phần mềm tự động



package HocKiemThuPhanMem;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class PracticeWebdriver {

 public static WebDriver driver;

 public static void main(String[] args) {

  
  driver = new FirefoxDriver();
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
   driver.findElement(By.name("username")).sendKeys("Học kiểm thử phần mềm tự đông");
  driver.findElement(By.name("password")).sendKeys("Học Kiểm thử");
  
  WebElement checkRemember = driver.findElement(By.name("perm_login"));
  WebElement checkSession = driver.findElement(By.name("secure_session"));

// Kiểm tra remember checkbox đã check chưa, nếu chưa check //thì thực hiện click để check

  if (checkRemember.isSelected() == false) {
   checkRemember.click(); 
  }
// Kiểm tra Session đã check chưa, nếu chưa thì thực hiện click để check 
  if (checkSession.isSelected() == false) {
   checkSession.click();
  }

  driver.findElement(

    By.xpath("/html/body/div[3]/form/table/tbody/tr[6]/td/input"))
    .click(); // phan nay se hoc sau

// Chọn Project 


  WebElement GetProject = driver.findElement(By.name("project_id")); 

  String GetProjectCurrent = GetProject.getText();
// Nếu text hiện tại khác Project name sẽ chọn thì mới thực hiện chọn 
  if (GetProjectCurrent != "User guide") {
   Select dropProject = new Select(driver.findElement(By
     .name("project_id")));
   dropProject.selectByVisibleText("User guide");
  }

// Click Report issue

  driver.findElement(By.linkText("Report Issue")).click();

// Khai báo biến 

  String category = "category_id";
  String reproducibility = "reproducibility";
  String Severity = "severity";
  String Priority = "priority";
// Chọn Category
  Select drpCategory = new Select(driver.findElement(By.name(category)));
  drpCategory.selectByVisibleText("All");

// Chọn reproducibility

  Select drpreproducibility = new Select(driver.findElement(By
    .name(reproducibility)));
  drpreproducibility.selectByVisibleText("always");

// CHọn Severity

  Select drpSeverity = new Select(driver.findElement(By.name(Severity)));
  drpSeverity.selectByVisibleText("major");

//Chọn Priority

  Select drpPriority = new Select(driver.findElement(By.name(Priority)));
  drpPriority.selectByVisibleText("high");
// Input Steps
  String Steps = " This is demo" ;
  String additional_info = " This is demo for Học kiểm thử phần mềm";
  String Platform = "IOS";

  driver.findElement(By.name("summary"))

    .sendKeys(
      "[Firefox][Run-Selenium Driver]The issue is posted by WebDriver for Học kiểm thử phần mềm tự động topic");

  driver.findElement(By.name("description")).clear();

  driver.findElement(By.name("description")).sendKeys(Steps);
  driver.findElement(By.name("additional_info"))
    .sendKeys(additional_info);
  Select PlatformSelect = new Select(driver.findElement(By
    .name("custom_field_1")));
  PlatformSelect.selectByVisibleText(Platform);

//Upload image - CHọn image trong ổ đĩa lưu trữ 

  WebElement uploadElement = driver.findElement(By.id("ufile[]"));
  uploadElement.sendKeys("D:\\SOFT\\Demo-Image\\Hoc-kiem-thu-phan-mem-2.jpg");

  driver.findElement(By.cssSelector("input[value='50']")).click();

// Click Submit
  driver.findElement(By.cssSelector("input[value='Submit Report']"))
    .click();
    
// Logout
 driver.findElement(By.linkText("View Issues")).click();
driver.findElement(By.linkText("Logout")).click();

  }


}


           

Video thực hành học kiểm thử phần mềm tự động



-----------------------

Học kiểm thử phần mềm 



Xem nhiều nhất

Zui Zui

Nếu bạn không đủ mạnh -Đừng cố đi ngược đám đông