# data[].attributes.attachment_link.readable_text
The Foundation Level certification is suitable for anyone who needs to demonstrate practical knowledge of the fundamental concepts of software testing including people in roles such as testers, test analysts, test engineers, test consultants, test managers, user acceptance testers, and software developers.

It is also appropriate for individuals who need a basic understanding of software testing including project managers, quality managers, software development managers, business analysts, IT directors, and management consultants.

# data[].attributes.attachment_link.title
Certified Tester Foundation Level v3.1 (CTFL)

# data[].attributes.attachment_link.description
The Foundation Level certification gives practical knowledge of the fundamental concepts of software testing and forms the basis of the ISTQB® Certified Tester Scheme.

# data[].attributes.attachment_link.title
test automation: câu hỏi phỏng vấn thường gặp

# data[].attributes.attachment_link.description
Bộ câu hỏi phỏng vấn việc làm và câu trả lời mẫu hay cho test automation bằng tiếng Anh và tiếng Việt giúp bạn chinh phục nhà tuyển dụng

# data[].attributes.attachment_link.title
Java 01. Vì sao học lập trình Java | Lập trình Java

# data[].attributes.attachment_link.title
Session 1: API Testing | RestAssured | Introduction | Environment Setup | HTTP Methods

# data[].attributes.body
http://restapi.adequateshop.com/swagger/ui/index#!/Traveler/Traveler_GetTourist

# data[].attributes.attachment_link.description
HTTP Error 404. The requested resource is not found.

# data[].attributes.headline
API Testing with Katalon Studio - Step by Step for Beginners

# data[].attributes.subject
API Testing with Katalon Studio - Step by Step for Beginners

# data[].attributes.body
https://www.udemy.com/course/api-testing-with-katalon-studio-step-by-step-for-beginners/learn/lecture/12624842#overview

# data[].attributes.attachment_link.title
Online Courses - Learn Anything, On Your Schedule | Udemy

# data[].attributes.attachment_link.description
Udemy is an online learning and teaching marketplace with over 213,000 courses and 62 million students. Learn programming, marketing, data science and more.

# data[].attributes.headline
Gherkin and Cucumber: BDD Testing for IOS, Android, and Web

# data[].attributes.subject
Gherkin and Cucumber: BDD Testing for IOS, Android, and Web

# data[].attributes.body
https://www.udemy.com/course/gherkin-and-cucumber-bdd-testing-for-apps-and-websites/learn/lecture/2873062#overview

# data[].attributes.body
https://www.udemy.com/course/master-jmeter-from-basics-performance-load-api-testing/learn/lecture/8134162#overview

# data[].attributes.body
https://anhtester.com/blog/50-khoa-hoc-tren-udemy-mien-phi-danh-cho-tester-b561.html

# data[].attributes.attachment_link.readable_text
Anh Tester chia sẻ đến bạn 50 khoá học trên Udemy miễn phí dành cho Tester. Các khoá học kiểm thử phần mềm này miễn phí nhưng có giới hạn thời hạn đăng ký nên các bạn tranh thủ tham gia đi kẻo nó hết nhé.

# data[].attributes.attachment_link.title
50 khoá học trên Udemy miễn phí dành cho Tester | Anh Tester

# data[].attributes.attachment_link.description
Anh Tester chia sẻ đến bạn 50 khoá học trên Udemy miễn phí dành cho Tester. Các khoá học kiểm thử phần mềm này miễn phí nhưng có giới hạn thời hạn đăng ký nên các bạn tranh thủ tham gia đi kẻo nó hết nhé.

# data[].attributes.body
https://drive.google.com/drive/folders/14pn229Lk4l9DaAaHEsomlhE8GJS28a-e

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.headline
Xử lí lỗi k access dc sele trong eclipse

# data[].attributes.subject
Xử lí lỗi k access dc sele trong eclipse

# data[].attributes.body
https://docs.google.com/document/d/1m1dt4BtI_oFC9kljvSin6Omh0FKCrYjiZH45gZAe5Vg/edit?usp=sharing

# data[].attributes.attachment_link.title
Xử lý lỗi k access dc selenium webdriver trong eclipse

# data[].attributes.body
https://drive.google.com/drive/folders/1aRec9iy88EEA_vZV8CfiP8V8ySis4liL?usp=sharing

# data[].attributes.attachment_link.readable_text
1. Set up selenium
- download selenium
- bold folder => click chuá»t pháº£i => properties => java build path
=> add external jar => chá»n file jar selinium vá»«a down => click apply.



2. Set up TestNG
- Trong eclipse chá»n Help => ecliple marketplace => testNg for eclipse 
=> installed

- cÃ¡ck ktra ÄÃ£ set up tjanfh cÃ´ng => window => show view
- cÃ i vÃ o project:
+ bold folder => click chuá»t pháº£i => properties => java build path
=> add library => chá»n TestNg

# data[].attributes.attachment_link.readable_text
1. Assertion
   npm assert
   const assert = require('assert');

- a mechanism for us to validate the state of our application
VD: use assertion to check that a url has changed following a 
sucessful login, valid error message or alert pop-up appear,
check item has been added to a shopping cart
=> confirm test pass or fail
=> built-in nodejs package for writing assertion  => dont use npm
to install this package => use require: const assert = require('assert')

2. Chain assertion using built-in nodejs library 
=> install chain: npm install chai
                  var should = require('chai').should() 

- very population library for js
- provide 3 function for writing assertions:
+ should: make those assertions more human readable
+ expect
+ assert



Part 4: Test framework
1. Intro test framework: jasmine, mocha
2. Intro to Mocha
- 1 of the most js framework
+ describe function: group test together
- if func inside describe funct
3. Adding Mocha to our test:
- 
4. Running our test
     npx mocha --no-timeouts 'test/test.js'

(*): Running our test using tests script
- thay value cá»§a "test" trong file json báº±ng mocha --no-timeouts
-  Äá»i tÃªn folder trÃ¹ng vá»i tÃªn biáº¿n "test"
- run cmd báº±ng lá»nh: npm test 


Part 5:Test Parallelisation:
1. Definition:
- a way to run multiple tests at the same time
- 2 ways to run tests:
+ serially:running each test in sequence one by one means wait for the
previous one to finish before it begins executing another test
+ parallel:running multiple tests at the same time, good practice to ensure of 
your tests is completely independent of all other
-> Purpose parallel:
+ increase speed
+ reduce feedback loop: 
2. Adding another test
- taá» thÃªm 1 file js má»i trong folder test
3. Running our tests in parallel
3.1. test in sequence
  - thay value cá»§a "test" trong file json báº±ng "mocha --no-timeouts"
  - run cmd báº±ng lá»nh: npm test

3.2. run in parallel
  - thay value cá»§a "test" trong file json báº±ng "mocha --no-timeouts --parallel"
  - run cmd báº±ng lá»nh: npm test


Part 6: Mochaawesome
1.Defenition:
- is a node package - enable us to create custom reports
2. Adding mochawesome
- npm install mochawesome
- update value cá»§a test trong file json:
   "test": "mocha --no-timeout --reporter tencuareporter"
VD: "test": "mocha --no-timeouts --reporter mochawesome"
(*) Náº¿u Äang cháº¡y báº±ng parallel, pháº£i add thÃªm additional flag, vÃ­ dá»¥
    "test": "mocha --no-timeouts --parallel --reporter mochawesome --require mochawesome/register "

(*) Thay tÃªn dir/file name báº±ng cÃ¡ch thÃªm options trong test-script file json
       "test": "mocha --no-timeouts --parallel --reporter mochawesome --require mochawesome/register --reporter-options reportDir=customReportDir,reportFilename=customReportFilename
vÃ­ dá»¥: 
  "test": "mocha --no-timeouts --parallel --reporter mochawesome --require mochawesome/register --reporter-options reportDir=TestReport,reportFilename=TestResults"



Part 7: Lambda test (have video)
1. Definition:
- use to run selenium tests on mutiple browsers and browser versions

2. Adv of using Lambdatest
3. Fetching username & access Key
4. Desired capabilities
- add which browsers, browser version & operating sys we want to run tests on
lambda test platform => use lambda test capability generator 

=> truy cap https://www.lambdatest.com/capabilities-generator/ de chon browser and copy that code
 
5. Running our tests
- táº¡o 1 file capabilities.js vÃ  paste Äoáº¡n code ÄÃ³ vÃ o
- import to your project file
- write this code inside describe function:
+ host máº·c Äá»nh: hub.lambdatest.com/wd/hub
    //username: const USERNAME = ltCapability.capability.username;
   
    //key: const KEY = ltCapability.capability.accessKey;

    //host: const GRID_HOST = "hub.lambdatest.com/wd/hub";
            const gridUrl = "https://" + USERNAME + ":" + KEY + "@" + GRID_HOST;

=> run by cmd: npm test

- hÃ m beforeEach: huáº©n bá» mÃ´i trÆ°á»ng hoáº·c thá»±c hiá»n cÃ¡c hÃ nh Äá»ng cáº§n thiáº¿t trÆ°á»c khi thá»±c hiá»n má»i bÃ i kiá»m tra.
Trong vÃ­ dá»¥ cá»§a báº¡n, beforeEach ÄÆ°á»£c sá»­ dá»¥ng Äá» táº¡o vÃ  káº¿t ná»i má»t Äá»i tÆ°á»£ng WebDriver vá»i LambdaTest trÆ°á»c khi báº¯t Äáº§u bÃ i kiá»m tra.

- hÃ m afterEach: HÃ m afterEach ÄÆ°á»£c gá»i sau má»i bÃ i kiá»m tra trong mÃ´ táº£.
Má»¥c ÄÃ­ch chÃ­nh cá»§a afterEach lÃ  lÃ m sáº¡ch vÃ  Äáº£m báº£o ráº±ng cÃ¡c tÃ i nguyÃªn ÄÆ°á»£c giáº£i phÃ³ng sau khi hoÃ n thÃ nh má»i bÃ i kiá»m tra.
Trong vÃ­ dá»¥ cá»§a báº¡n, afterEach ÄÆ°á»£c sá»­ dá»¥ng Äá» ÄÃ³ng phiÃªn WebDriver sau khi má»i bÃ i kiá»m tra hoÃ n thÃ nh.


Part 8:Headless mode (not render video)
1. Headless testing:
- Running our UI test on a headless browser, doesn't have graphic or GUI => doesn't
render page visually for us to see
- Adv:run out test without waiting for evth to load up on page in order to
continue our tests => test run faster & less flaky
=> no use a headless browser to view a web application bc you won't see anything
=> headless browser not a replacement traditional browsers
=> great to run your automated test => find bugs earlier

2. Updating capabilities
- => truy cap https://www.lambdatest.com/capabilities-generator/ de chon browser and copy that code
- turn on Headless 
- copy code and paste in file js

3. Running our test again
  npm test

Part 9:Parameterization/Parameterized test
1. Definition
- a neat trick enable us to use a single test and run it multiple times but for different data inputs
=> good for removw some of duplication code

2. Creating a new parameterized test: use forEach
- create: paramTest.js
- add an arr of all different browser, bversion, os
- add forEach(truyá»n value) function wrap it block
- update test by setting capabilitie (platform (os), browserName, browserVersion)

3. Running out test
  npm test test/paramTest.js




(*) PhÃ¢n biá»t this.currentTest vÃ  this.test.

- this.currentTest: ÄÃ¢y lÃ  má»t biáº¿n tham chiáº¿u Äáº¿n test case (bÃ i kiá»m tra) Äang ÄÆ°á»£c thá»±c thi hiá»n táº¡i. 
NÃ³ cung cáº¥p thÃ´ng tin vá» tÃªn test case, tráº¡ng thÃ¡i (pass/fail), vÃ  cÃ¡c phÆ°Æ¡ng thá»©c liÃªn quan khÃ¡c nhÆ° skip(), 
timeout(), vv. NÃ³ thÆ°á»ng ÄÆ°á»£c sá»­ dá»¥ng trong cÃ¡c hook (trÆ°á»c/ sau khi má»i test case thá»±c thi) (beforeEach, afterEach) 
hoáº·c trong cÃ¡c callback cá»§a cÃ¡c hÃ m kiá»m tra.

- this.test: ÄÃ¢y lÃ  má»t biáº¿n tham chiáº¿u Äáº¿n táº¥t cáº£ cÃ¡c test case trong táº­p há»£p hiá»n táº¡i. 
NÃ³ cung cáº¥p cÃ¡c phÆ°Æ¡ng thá»©c Äá» quáº£n lÃ½ cÃ¡c test case nhÆ° only() Äá» chá» cháº¡y má»t test case cá»¥ thá», 
skip() Äá» bá» qua test case, vv. NÃ³ thÆ°á»ng ÄÆ°á»£c sá»­ dá»¥ng trong cÃ¡c hook toÃ n cá»¥c (trÆ°á»c/ sau khi táº¥t cáº£ 
cÃ¡c test case thá»±c thi)(before, after) hoáº·c trong cÃ¡c callback cá»§a cÃ¡c hÃ m kiá»m tra.

- VÃ¬ this.currentTest chá» Äá» cáº­p Äáº¿n test case hiá»n táº¡i, trong khi this.test Äá» cáº­p Äáº¿n táº¥t cáº£ cÃ¡c test case, 
nÃªn cÃ¡c phÆ°Æ¡ng thá»©c vÃ  thuá»c tÃ­nh ÄÆ°á»£c truy cáº­p thÃ´ng qua chÃºng cÅ©ng sáº½ khÃ¡c nhau. 

=> Viá»c sá»­ dá»¥ng this.currentTest.title hoáº·c this.test.title phá»¥ thuá»c vÃ o viá»c báº¡n Äang muá»n truy cáº­p thÃ´ng tin 
vá» test case Äang ÄÆ°á»£c thá»±c thi hiá»n táº¡i (this.currentTest.title) hay toÃ n bá» táº­p há»£p cÃ¡c test case (this.test.title).





# data[].attributes.attachment_link.readable_text
Topic Covered : 
- What is automation testing?
- Overview of Selenium:

- How does selenium work?
- selenium gá»m 4 tp: ide, rc, webdriver, selenium grid

*Step to start the journey with selenium
    1. Install NodeJS - https://nodejs.org/en/download/
       Optional Step : Add nodejs and NPM path to environment variable.
    2. Install Visual Studio Code - https://code.visualstudio.com/download
    3. Create a folder
    4. Open the command line from the newly created folder
    5. Run command ânpm initâ  - It will add npm package to your project
    6. Install selenium-webdriver using  command ânpm install selenium-webdriverâ
    7. Download browser driver â ChormeDriver - 
    8. https://chromedriver.chromium.org/dow...
    9. Write code to launch browser
    10. Identify Elements
    11. Automate One Simple Flow

BÃ i 2:

1. Selenium with 2 locators: traditional locators and relative locators
 1.1. Traditional locators: 8 kinds
  - className:=> rcm don't use
          driver.findElement(By.className('gb_d'))
  - css selector => rcm don't use
           
  - id
      driver.findElement(By.id('q'))
  - name:
        driver.findElement(By.name('q'))
  - link text: link
          driver.findElement(By.linkText('store'))
  - partial link text

  - tag name => rcm don't use bc very fragile thing 
          let anchor_elements = await driver.findElements(By.tagName('a'));
          for(let e of anchor_elements) {
                   console.log(await e.getText());
           } finally {
                   
  - xpath:
        driver.findElement(By.xpath('//button/div[contains(text(), 'Accept all')]")).click()  


==> should use: name, id, link text, partial link text
* How to create for xpath
- 


# data[].attributes.body
https://docs.google.com/spreadsheets/d/1VVDrgOZF3__8bYpJzGdnFMLqFlpqObq9TTYGTC9yARs/edit#gid=0

# data[].attributes.attachment_link.description
Create a new spreadsheet and edit with others at the same time -- from your computer, phone or tablet. Get stuff done with or without an internet connection. Use Sheets to edit Excel files. Free from Google.

# data[].attributes.body
https://drive.google.com/drive/folders/1352KTopJB7z2ugkJUaFs0g973v-h1Zv4

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.body
https://www.postman.com/postman/workspace/15-days-of-postman-for-testers/folder/1559645-86c55c22-9014-4ee0-b4cc-c5d6861038d1

# data[].attributes.attachment_link.readable_text
When working with HTTP APIs, a client sends a request, and the server returns a response. Let's learn more about Postman as an API client using that echoes back data provided by the client.

Save your changes, and move on to the next folder in this collection to submit your solution. Today's challenge is only half completed!

# data[].attributes.attachment_link.title
API client | 15 days of Postman - for testers

# data[].attributes.attachment_link.description
It's time to work on your first challenge. When working with HTTP APIs, a client sends a request, and the server returns a response. Let's learn more about Pos

# data[].attributes.body
https://viblo.asia/p/mo-hinh-agile-quy-trinh-scrum-LzD5dwezljY

# data[].attributes.attachment_link.readable_text
1. Khái niệm

Là phương pháp phát triển phần mềm linh hoạt dể làm sao đưa sản phẩm đến tay người dùng càng nhành càng tốt càng sớm càng tố. Scrum là 1 dạng của mô hình Agile và là Framework phổ biến nhất khi thực hiện mô hình agile. Scrum là mô hình phát triển phần mềm lặp đi lặp lại. Những khoảng lặp cố định thường kéo dài 1,2 tuần được gọi lại Sprint hoặc Iteration

2. Quy trình Scrum vận hành như thế nào

Product backlog: đây là danh sách ưu tiên các tính năng (feature) hoặc đầu ra khác của dự án, có thể hiểu như là danh sách yêu cầu (requiement) của dự án. Produck Owner chịu trách nhiệm sắp xếp độ ưu tiên cho từng hạng mục (product backlog item) trong product backlog dựa trên các giá trị do Produck Owner định nghĩa. Sprint backlog: đây là bản kế hoạch cho một sprint, là kết quả của buổi học kế hoạch (sprint planning). Với sự kết hợp của Produck Owner, nhóm sẽ phân tích cá yêu cầu theo độ ưu tiên từ cao xuống thấp để hiện thực hóa các hạng mục trong product backlog dưới dạng danh sách công việc. Produck Owner tạo ra product backlog chứa các yêu cầu của dự án với hạng mục được sắp theo thứ tự ưu tiên. Đội sản xuất sẽ thực hiện việc hiện thực hóa dần các yêu cầu của Produck Owner với sự lặp đi lặp lại các giai đoàn từ 1 đến 4 tuần làm việc gọi là sprint với đầu vào là các hạng mục trong product backlog, đầu ra là các gói phần mềm hoàn chỉnh có thể chuyển giao. Đội sản xuất cùng họp với Produck Owner để lập kế hoạch cho từng sprint. Kết quả của buổi lập kế hoạch (theo cách làm của Scrum) là sprint backlog chứa các công việc cần làm trong suốt 1 sprint.

Các sprint sẽ được lặp đi lặp lại cho tới khi nào các hạng mục trong product backlog đều được hoàn tất. Trong suốt quá trình phát triển, nhóm sẽ phải cập nhật sprint backlog và thực hiện công việc họp hằng này để chia sẻ tiến đọc công việc cũng như các vướng mắc trong quá trình làm việc cùng nhau. Nhóm được trao quyên để tự quản lí và tổ chức lấy công việc của mình để hoàn thành công việc trong sprint. Khi kết thúc sprint, nhóm tạo ra các gói phần mềm có chức năng hoàn chỉnh, sẵn sàng chuyển giao cho khách hàng. Buổi họp sơ kết sprint ở cuối sprint sẽ giúp khách hàng thấy được nhóm đã có thể chuyển giao những gì, còn những gì phải làm hoặc còn gì phải thay đổi hay cải tiến. Sau khi kết thúc đánh giá sprint, scrum master và nhóm cùng tổ chức họp cải tiếng để tìm kiếm các cải tiến trước khi sprint tiếp theo bắt đầu, điều này sẽ giúp nhóm liên tục học hỏi và trưởng thành qua từng sprint.

3. Đặc trưng Agile

3.1 Tính lặp (Iterative) Dự án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại. Các phân đoạn (được gọi là Iteration hoặc Sprint) này thường có khung thời gian ngắn (từ một đến bốn tuần). Trong mỗi phân đoạn này, nhóm phát triển thực hiện đầy đủ các công việc cần thiết như lập kế hoạch, phân tích yêu cầu, thiết kế, triển khai, kiểm thử (với các mức độ khác nhau) để cho ra các phần nhỏ của sản phẩm. Các phương pháp agile thường phân chia mục tiêu thành các phần nhỏ với quá trình lập kế hoạch đơn giản và gọn nhẹ nhất có thể, và không thực hiện việc lập kế hoạch dài hạn.

3.2 Tính tiệm tiến (Incremental) và tiến hóa (Evolutionary) Cuối các phân đoạn, nhóm phát triển thường cho ra các phần nhỏ của sản phẩm cuối cùng. Các phần nhỏ này thường là đầy đủ, có khả năng chạy tốt, được kiểm thử cẩn thận và có thể sử dụng ngay (gọi là potentially shippable product increment of functionality). Theo thời gian, phân đoạn này tiếp nối phân đoạn kia, các phần chạy được này sẽ được tích lũy, lớn dần lên cho tới khi toàn bộ yêu cầu của khách hàng được thỏa mãn. Khác với mô hình phát triển Thác nước - vốn chỉ cho phép nhìn thấy toàn bộ các chức năng tại thời điểm kết thúc dự án, sản phẩm trong các dự án agile lớn dần lên theo thời gian, tiến hóa cho tới khi đạt được trạng thái đủ để phát hành.

3.3 Tính thích ứng (hay thích nghi - adaptive) Do các phân đoạn chỉ kéo dài trong một khoảng thời gian ngắn, và việc lập kế hoạch cũng được điều chỉnh liên tục, nên các thay đổi trong quá trình phát triển (yêu cầu thay đổi, thay đổi công nghệ, thay đổi định hướng về mục tiêu v.v.) đều có thể được đáp ứng theo cách thích hợp . Ví dụ, trong Scrum - phương pháp phổ biến nhất hiện nay - trong khi nhóm phát triển sản xuất ra các gói phần mềm, khách hàng có thể đưa thêm các yêu cầu mới, chủ sản phẩm (Product Owner) có thể đánh giá các yêu cầu này và có thể đưa vào làm việc trong phân đoạn (được gọi là Sprint trong Scrum) tiếp theo. Theo đó, các quy trình agile thường thích ứng rất tốt với các thay đổi.

3.4 Nhóm tự tổ chức và liên chức năng Cấu trúc nhóm agile thường là liên chức năng(cross-functionality) và tự tổ chức(self-organizing). Theo đó, các nhóm này tự thực hiện lấy việc phân công công việc mà không dựa trên các mô tả cứng về chức danh (title) hay làm việc dựa trên một sự phân cấp rõ ràng trong tổ chức. Các nhóm này cộng tác với nhau để ra quyết định, theo dõi tiến độ, giải quyết các vấn đề mà không chờ mệnh lệnh của các cấp quản lý. Họ không làm việc theo cơ chế "mệnh lệnh và kiểm soát" (command and control).

3.5 Quản lý tiến trình thực tiễn (Empirical Process Control) Các nhóm agile ra các quyết định dựa trên các dữ liệu thực tiễn thay vì tính toán lý thuyết hay các tiền giả định (prescription). Việc phân nhỏ dự án thành các phân đoạn ngắn góp phần gia tăng các điểm mốc để nhóm phát triển thu thập dữ kiện cho phép điều chỉnh các chiến lược phát triển của mình. Nói cách khác, Agile rút ngắn vòng đời phản hồi (short feedback life cycle) để dễ dàng thích nghi và gia tăng tính linh hoạt. Theo thời gian, các chiến lược này sẽ tiến gần đến trạng thái tối ưu, nhờ đó nhóm có thể kiểm soát được tiến trình, và nâng cao năng suất lao động.

3.6 Giao tiếp trực diện(face-to-face communication) Trong giao tiếp giữa nội bộ nhóm phát triển với nhau, thay vì một lập trình viên (thực hiện việc code) và một kĩ sư (thực hiện việc thiết kế) giao tiếp với nhau thông qua bản thiết kế, agile khuyến khích hai người này trực tiếp trao đổi và thống nhất với nhau về thiết kế của hệ thống và cùng nhau triển khai thành các chức năng theo yêu cầu.

3.7 Phát triển dựa trên giá trị (value-based development) Một trong các nguyên tắc cơ bản của agile là "phần mềm chạy tốt chính là thước đo của tiến độ". Nguyên tắc này giúp nhóm dám loại bỏ đi các công việc dư thừa không trực tiếp mang lại giá trị cho sản phẩm.

4. Quy trình Scrum: 4 cuộc họp

1. Sprint Panning(họp kế hoạch Sprint): nhóm phát triển họp với product owner để lên kế hoạch làm việc cho 1 sprint. Công việc lập kế hoạch bao gồm việc chọn lựa các yêu cầu cần phải phát triển, phân tích và nhận biết các công việc phải làm kèm theo các ước lượng thời gian cần thiets để hoàn tất các tacs vụ. Scrum sử dụng cách thực lập kế hoạch từng phần và tăng dần theo thời gian, theo đó việc lập kế hoạch không diễn ra duy nhất một lần trong vòng đời của dự án mà được lặp đi lặp lại, có sự thích nghi với các tình hình thực tiễn trong tiến trình đi đến sản phẩm.

2. Daily Scrum (họp scrum hằng ngày): scrum master tổ chức cho đội sản xuất họp hằng ngày trong khoảng 15p để nhóm hát triển chia sẻ tiến độc công việc, trong cuộc họp này từng người trong nhóm phát triển lần lượt trình bày để trả lời 3 câu hỏi: Hôm qua đã làm gì? Hôm nay sẽ làm gì? Có khó khăn trở ngại gì không?

3. Sprint review (họp sơ keert sprint): cuối sprint nhóm phát triển cũng với product owner sẽ rà soát lại các công việc đã hoàn tất trong sprint vừa qua và đề xuất các chỉnh sửa hoặc thay đổi cần thiết cho sản phẩm

4. Sprint Retrospective (họp cải tiến sprint): dưới sự trợ giúp của scrum master nhóm phát triển sẽ rà soát lại toàn diền sprint vừa kết thúc và tìm cách cải tiến quy trình làm việc cũng như bản thân sản phẩm.

5. Quy trình Scrum: 3 vai trò

Trong scrum đội ngũ tham gia phát triển phần mềm được phân chia ra ba vai trò với trách nhiệm rõ ràng để dảm bảo tối ưu hóa các công việc đặc thù. Ba vai trò này bao gồm:

Product Owner(GĐ dự án): là người chịu trách nhiệm về sự thành công của dự án, người định nghĩa các yêu cầu và đánh giá cuối cùng đầu ra của các nhà phát triển phần mềm

Scrum Master(Quản lý dự án): họ phải đảm bảo các sprint được hoàn thành đúng mục đích, bảo vệ đội làm việc và loại bỏ các trở ngại.

Development Team(Dev, Test...): thường 5-9 người, tùy theo quy mô dự án nó có thể có rất nhiều, nhiều người tham gia.

NỘI DUNG CẦN NHỚ CỦA QUY TRÌNH SCRUM
Không thực hiện đưa toàn bộ yêu cầu/ nghiệp vụ hệ thống vào code và testing cùng 1 lúc mà sẽ chia các yêu cầu làm theo từng giai đoạn. Mỗi giai đoạn chỉ làm 1 số lượng yêu cầu nhất định

Chi thành nhiều giai đoạn nhỏ để thực hiện hay còn gọi lại sprint

Mỗi 1 sprint thường kéo dài từ 1 đến 4 tuần (không dài hơn 1 tháng)

Đầu sprint sẽ lên kế hoạch làm những yêu cầu nào, sau đó sẽ thực hiện code và test. Cuối sprint là 1sp hoàn hiện cả code lẫn test có thể demo và chạy được

Hoàn thành sprint 1, tiếp tục làm sprint 2,.... cho đến khi hoàn thành hết các yêu cầu

Trong mỗi 2 sprint thì sẽ có họp hàng - daily meeting. Cả team sẽ đứng họp thành 1 vòng tròn thường chỉ hopjc 15-20p. Mỗi thành viên sẽ báo cáo: hôm qua đã làm gì? Hôm nay sẽ làm gì? Có gặp khó khăn gì không?

Trong mỗi 1 sprint thì các thành viên của dự án phải tạo task cho code và test, một tast code xong là phải có task test liền ngay đó. Do thời gian làm ngắn nên hiệu quả làm việc cao, đúng tiến độ đảm bảo cuối sprint là hoàn thành được cả test

Ưu điểm phù hợp với những yêu cầu nghiệp vụ hay thay đổi hoặc hệ thống nghiên cứu do làm theo từng giai đoạn ngắn ngày, có thể nhìn thấy những rủi ro hay những điểm chưa phù hợp để thay đổi

Điều hành đội dự án sẽ là ông scrum maste, còn có product owner là người đánh giá phần mềm làm đã đúng nghiệp vụ/ yêu cầu chưa

6. Ba chân (hay giá trị cốt lõi) của Scrum

Có 3 yếu tố cốt lõi của Scrum là:

Minh bạch: Mọi kế hoạch và công việc của các thành viên tất cả mọi người đều phải biết và công khai kể cả PO.

Thanh tra: Phải thường xuyên thanh tra kiểm soát tiến độ công việc của mình xem đã hoàn thành đến đâu rồi có phát hiện điều gì bất thường không để kịp thời xử lý, đảm bảo tiến độ công việc.

Thích nghi: Là đảm bảo rằng khi có một vấn đề mới hay có sự thay đổi nào từ phía khách hàng thì mọi người trong team sẽ có thể xử lý và đáp ứng theo cách thích hợp. Luôn phải thích nghi trọng mọi hoàn cảnh.

# data[].attributes.body
https://drive.google.com/drive/folders/1vV-4WPw9Bzj3BvHgmJMk6YwxWG65F5DO

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.body
https://viblo.asia/p/mot-so-thu-thuat-khi-su-dung-xpath-trong-selenium-3Q75wGv25Wb

# data[].attributes.attachment_link.readable_text
Khi làm việc với Automation Test Coding, chúng ta quá quen thuộc với việc xác định các element có trên web page thông qua các thuộc tính của nó như id, name, class,.... việc sử dụng những thuộc tính này giúp cho việc tìm kiếm trở nên rất dễ dàng và nhanh chóng. Tuy nhiên, có một số element chúng ta không thể tìm kiếm nó thông qua các thuộc tính vừa kể trên được và cũng có một số element có thuộc tính động, không cố định theo thời gian. Trong trường hợp này chúng ta cần sử dụng một cách định vị element thông minh hơn, phù hợp với các element có yếu tố phức tạp và thay đổi linh hoạt. Trong bài này, mình sẽ chia sẽ với mn về 15 cách để tìm kiếm element thông qua XPath locators.

XPath Selenium Selectors

Chúng ta có thể tìm kiếm vị trí của bất kì element nào nằm trên web page sử dụng biểu thức XML path. Cú pháp cơ bản của nó như sau:

Absolute and Related Path

Thông thường, khi mà phỏng vấn về Automation Test sẽ có một vài người sẽ hỏi về sự khác nhau giữa 2 loại này. Dưới đây mình sẽ điểm qua một số điểm khác biệt giúp mn có thể dễ dàng phân biệt được 2 loại này.

Absolute XPath

Đó là một cách trực tiếp để xác định vị trí của một element

Bắt đầu bằng dấu "/" đơn, có nghĩa là bắt đầu tìm kiếm từ gốc

Bởi vì nó tìm kiếm trực tiếp nên nó rất là cứng

Example: /html/body/div[2]/div/div[2]/div[1]/div[2]/form/div/input

Thông qua ví dụ trên các bạn sẽ hiểu rõ hơn vì sao nó cứng rồi nhé. Thử lấy ví dụ: Nếu như mình thêm vào một thẻ div vào vị trí đầu tiên trong thẻ body thì /html/body/div[2]/div/div[2]/div[1]/div[2]/form/div/input sẽ trả về một phần tử khác phần tử ban đầu mà ta mong muốn.

Related XPath

Có thể bắt đầu bất kì từ vị trí nào bạn muốn, chứ không nhất thiết phải từ gốc như Absolute XPath

Bắt đầu bằng dấu "//" đôi

Ngắn hơn Absolute XPath

Linh hoạt hơn

Example: //div[@class='form-group']//input[@id='user-message']

Example: //*[@class='panel-body']//li[contains(text(),'entered in input field')]

Dấu * có nghĩa là tất cả các loại tag, có thể là input, div, button,...

Contains

Contains là một kỹ thuật rất là tiện dụng trong việc định vị vị trí element của XPath Selenium. Khi một thuộc tính của một element là thay đổi liên tục, lúc đó bạn có thể sử dụng contains() cho phần không thay đổi trong thuộc tính của element, hoặc có thể dùng cho bất kì điều kiện gì bạn muốn.

Example: Tìm các thẻ input có id chứa 'er-messa' //input[contains(@id, 'er-messa')]

Examples:

//*[contains(@name,'btnClick')] --> Tìm các tags có thuộc tính name chứa đoạn text "btnClick" //*[contains(text(),'here')] --> Tìm các tags có text chứa chữ "here" //*[contains(@href,'swtestacademy.com')] --> Tìm các link có url chứa "swtestacademy.com"

Operator "or"

Đôi lúc chúng ta không chỉ tìm kiếm element dựa trên một thuộc tính duy nhất được bởi vì các thuộc tính của element có thể thay đổi. Vậy nên toán tử "or" giúp ta tìm kiếm element dựa trên nhiều điều kiện. Giả sử ta có 2 điều kiện A và B và dưới đây là bảng kết quả thu được khi sử dụng toán tử "or" cho 2 điều kiện A, B:

Lưu ý: toán tử "or" phải là chữ in thường

Syntax: //tag[XPath Statement 1 or XPath Statement 2]

Example: //[@id='user-message' or @class='form-control']

Đoạn XPath trên dùng để tìm kiếm các thẻ tags có id='user-message' hoặc class='form-control'

Operator "and"

Một trong những toán tử quan trọng nhất trong ngôn ngữ lập trình, đối lập với toán tử "or" không ai khác ngoài toán tử "and". Toán tử and dùng để gộp nhiều điều kiện lại với nhau.

Syntax: //tag[XPath Statement-1 and XPath Statement-2]

Example: //[@id='user-message' and @class='form-control']

Text

Chúng ta có thể tìm kiếm tags bằng đoạn text chính xác.

Example: .//label[text()='Enter message']

Ancestor

Dùng để tìm tổ tiên của tag. Trước hết nó tìm kiếm element và gán cho nó là nút gốc, sau đó tìm các tag ancestry bắt đầu từ nút gốc vừa tìm được:

1. Đầu tiên, tìm kiếm tag có thuộc tính class là 'container-fluid'

2. Sau đó tìm các thẻ div có trong element vừa tìm được ở bước 1

Example: //[@class='container-fluid']//ancestor::div

Bạn có thể tìm kiếm đến thẻ div bạn muốn bằng cách:

.//*[@class='container-fluid']//ancestor::div[1] - Returns 13 nodes .//*[@class='container-fluid']//ancestor::div[2] - Returns 7 nodes .//*[@class='container-fluid']//ancestor::div[3] - Returns 5 nodes .//*[@class='container-fluid']//ancestor::div[4] - Returns 3 nodes .//*[@class='container-fluid']//ancestor::div[5] - Returns 1 node

Vậy là mình đã giới thiệu sơ qua một vài thủ thuật tìm kiếm element bằng XPath, ngoài ra có một extension hỗ trợ bạn xác định XPath của một element đó là ChroPath

Sau đó sử dụng như hình:

Cảm ơn mn đã đọc. Chúc mn cuối tuần vui vẻ . Happy coding!

# data[].attributes.attachment_link.title
Một số thủ thuật khi sử dụng xpath trong selenium

# data[].attributes.attachment_link.description
Khi làm việc với Automation Test Coding, chúng ta quá quen thuộc với việc xác định các element có trên web page thông qua các thuộc tính của nó như id, name, class,.... việc sử dụng những thuộc tính...

# data[].attributes.body
https://www.guru99.com/selenium-tutorial.html

# data[].attributes.attachment_link.readable_text
Selenium Tutorial Summary

Selenium is a popular open-source web-based automation tool. This online course is a step by step guide to learn Selenium Concepts. It is recommended you refer these Selenium Tutorials sequentially, one after the other.

What should I know?

This free Selenium tutorial is designed for beginners with little or no automation experience. If you are new to testing first take the basic Software Testing class.

Selenium Tutorial Syllabus

First Look

Selenium WebDriver Basics Tutorial

It will be beneficial if you revisit Java, before reading tutorials on Webdriver

TestNG

Frameworks

Advance Webdriver Stuff!

Selenium IDE Tutorial

Must Check!

Live Selenium Project

# data[].attributes.attachment_link.description
Selenium Tutorial for Beginners: Learn Selenium Basics ✔️ TestNG ✔️ Frameworks ✔️ Advanced Stuff ✔️ Selenium IDE ✔️ Live Project and more in detail.

# data[].attributes.headline
một số trang web hay để thực hành với selenium

# data[].attributes.subject
một số trang web hay để thực hành với selenium

# data[].attributes.body
https://vananhtooo.wordpress.com/2017/08/20/mot-so-ung-dung-web-de-ban-thuc-hanh-selenium/

# data[].attributes.attachment_link.title
End to End Selenium Framework | E-Commerce Project | Complete Selenium Framework from Scratch|

# data[].attributes.body
http://54.169.237.138:81/

gmail: admin@gmail.com
pass: Abc@1234