Chuyển tới nội dung chính

Changelog

31/07/2026​

  • Thêm action clickInGrid — Click vào dòng trong grid, hỗ trợ 2 chế độ:
    • Đơn giản: Value = text cần tìm trong <td> đầu tiên (ví dụ: Phụ tùng A)
    • Nhiều cột: Value = các cặp cot=giá_trị phân tách bởi || (ví dụ: ten=Phụ tùng||ma=PT001)
    • Thay thế cách viết CSS selector phức tạp bằng cú pháp đơn giản, dễ đọc hơn
  • Nâng cấp expectFocusedInGrid — hỗ trợ thêm chế độ nhiều cột (cùng format với clickInGrid)
    • Cũ: chỉ tìm text trong cell focused
    • Mới: hỗ trợ thêm cot1=val1||cot2=val2 để kiểm tra dòng focused chính xác hơn
  • Thêm action expectNotInGrid — Kiểm tra một dòng KHÔNG tồn tại hoặc Grid trống
    • Grid trống: Value để trống (không tìm thấy tr chứa td nào)
    • Đơn giản / Nhiều cột: giống hệt format của expectFocusedInGrid
  • Tất cả expect* actions hỗ trợ nhiều Locator||Value trong 1 step
    • Phân tách Locator bởi || để kiểm tra nhiều element cùng lúc
    • Ví dụ: Locator = #txt_ma||#txt_ten, Value = ABC||Tên SP
    • Backward compatible — 1 locator/value vẫn hoạt động như cũ
  • Tất cả save* actions hỗ trợ nhiều Locator||Value trong 1 step (cùng format với expect*)
  • Cột SaveData hỗ trợ nhiều Locator||SaveData — lưu nhiều biến từ nhiều element cùng lúc

29/07/2026​

  1. Thêm cột SaveData trong sheet Steps — Tự động lưu dữ liệu sau mỗi step

    • Chỉ cần điền tên biến vào cột SaveData, engine sẽ tự detect loại element:
      • input/select/textarea → lưu inputValue()
      • Các element khác (span, div, td...) → lưu innerText()
    • Không cần thêm step saveText/saveValue riêng, giảm số dòng trong testcase
    TC_IDStep_NoDescriptionActionLocatorValueSaveData
    NHAP1Điền mãfill#ctl00_ContentPlaceHolder1_txt_maABC123savedMa
  2. Cải thiện gotoMenu — Nếu page đích đã mở sẵn (chưa bị đóng) thì skip navigation, chỉ switch sang page đó. Giúp tiết kiệm thời gian khi nhiều testcase cùng dùng chung 1 trang

  3. Khi mới bắt đầu Test sẽ tự động vào Menu đầu tiên

09/04/2026​

  • expectFocusedInGrid Kiểm tra bản ghi có được focus trong lưới sau khi được lưu/ được nhập xong mã hay không
  • expectAriaSnapshot So khớp snapshot ảnh để kiểm tra toàn bộ màn hình
  • expectSnapshot Kiểm tra các trường, cấu trúc html có bị thay đổi không
  • saveSnapshot lưu thông tin ảnh chụp, kết hợp expectSnapshot để so sánh màn hình
  • expectHasNoColor Kiểm tra link tiện ích không đổi màu (có màu xanh)

17/04/2026​

  • Cập nhập hàm fillGrid: Hỗ trợ DataShet thứ 2 để check thông tin trên Grid

    TC_IDStep_NoDescriptionActionLocatorValue
    Nhap4Nhập thông tin thanh toánfillGrid#ctl00_ContentPlaceHolder1_kytt_ctr_bhhd_kytt_GR_kyttSheetFill,SheetCheck
  • Thêm action expectGridData để kiểm tra thông tin trên Grid

    TC_IDStep_NoDescriptionActionLocatorValue
    Nhap4Nhập thông tin thanh toánfillGrid#ctl00_ContentPlaceHolder1_kytt_ctr_bhhd_kytt_GR_kyttSheetFill
    Nhap5Check lại gridexpectgriddata#ctl00_ContentPlaceHolder1_kytt_ctr_bhhd_kytt_GR_kyttSheetCheck

17/04/2026 - 2​

  • Cập nhập logic Fill Grid và Assert Grid cho action fillGrid. Format Value:

    FormatMô tả
    SHEETFill tất cả fields
    `SHEET
    SHEET_FILL, SHEET_ASSERTFill tất cả, rồi assert tất cả từ sheet 2
    `SHEET_IN
  • Cập nhập logic Assert Grid cho action expectGridData. Format Value:

    FormatMô tả
    SHEETAssert tất cả fields
    `SHEET

20/04/2026​

  • Thêm action fillFullData Điền tất cả các row từ DataSheet theo tuần tự. Mặc định tự động điền dữ liệu và nhấn nút "Nhập" cho từng dòng. Value = "SHEET_NAME" (ví dụ: NNTT_DATA)

    TC_IDStep_NoDescriptionActionLocatorValue
    NHAP4Nhập dữ liệu row1fillFullDataData

25/04/2026​

1. Hỗ trợ expected và prompt trong Value

handleDialog và setAutoDialog giờ parse Value theo format mở rộng

ValueHành vi
acceptAccept dialog (như cũ)
dismissDismiss dialog (như cũ)
`accept
`accept
`accept
`accept

Nếu message không khớp expected → dismiss và báo lỗi về ActionEngine.

2. Action mới expectDialog

Action expectDialog lắng nghe dialog tiếp theo, assert message, rồi dismiss (hoặc accept).

ValueHành vi
(rỗng)Chỉ dismiss dialog
Bạn có muốn lưu không?Assert message chứa text, rồi dismiss
/Lưu.*/ hoặc re:Lưu.*Assert regex, rồi dismiss
`expected:text
`expected:text

26/05/2026​

  1. Thêm action upload để upload 1 file
    • Action: upload
    • Loccator: selector của input file
    • Value: Đường dẫn tuyệt đối hoặc tương đối của file muốn upload, ví dụ imports/data.xls
TC_IDStep_NoDescriptionActionLocatorValue
CHON1Vào trang menugoto${MENU}
CHON2Chọn menu và mở popupgotoMenuHợp đồng gốc,Bảo hiểm xe cơ giới,Khai báo mã,Thông tin về xe,Loại xe
NHAP3Bắt auto dialog errorsetAutoDialogerror
NHAP4Mở màn hình upload filewaitForNewPageAfterClick#ctl00_ContentPlaceHolder1_dia
NHAP5Upload fileupload#ctl00_ContentPlaceHolder1_chon_fileimports/xe_loai.xls
NHAP6Click mởclickbutton:Mở
NHAP7Kiểm tra bản ghi trên lướiwait10000