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 giản: Value = text cần tìm trong
- Nâng cấp
expectFocusedInGrid— hỗ trợ thêm chế độ nhiều cột (cùng format vớiclickInGrid)- 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
trchứatdnào) - Đơn giản / Nhiều cột: giống hệt format của
expectFocusedInGrid
- Grid trống: Value để trống (không tìm thấy
- 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ũ
- Phân tách Locator bởi
- Tất cả
save*actions hỗ trợ nhiều Locator||Value trong 1 step (cùng format vớiexpect*) - Cột
SaveDatahỗ trợ nhiều Locator||SaveData — lưu nhiều biến từ nhiều element cùng lúc
29/07/2026
-
Thêm cột
SaveDatatrong 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ưuinputValue()- Các element khác (span, div, td...) → lưu
innerText()
- Không cần thêm step
saveText/saveValueriêng, giảm số dòng trong testcase
TC_ID Step_No Description Action Locator Value SaveData NHAP 1 Điền mã fill #ctl00_ContentPlaceHolder1_txt_ma ABC123 savedMa - Chỉ cần điền tên biến vào cột
-
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 -
Khi mới bắt đầu Test sẽ tự động vào Menu đầu tiên
09/04/2026
expectFocusedInGridKiểm tra bản ghi có được focus trong lưới sau khi được lưu/ được nhập xong mã hay khôngexpectAriaSnapshotSo khớp snapshot ảnh để kiểm tra toàn bộ màn hìnhexpectSnapshotKiểm tra các trường, cấu trúc html có bị thay đổi khôngsaveSnapshotlưu thông tin ảnh chụp, kết hợpexpectSnapshotđể so sánh màn hìnhexpectHasNoColorKiể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 GridTC_ID Step_No Description Action Locator Value Nhap 4 Nhập thông tin thanh toán fillGrid #ctl00_ContentPlaceHolder1_kytt_ctr_bhhd_kytt_GR_kytt SheetFill,SheetCheck -
Thêm action
expectGridDatađể kiểm tra thông tin trên GridTC_ID Step_No Description Action Locator Value Nhap 4 Nhập thông tin thanh toán fillGrid #ctl00_ContentPlaceHolder1_kytt_ctr_bhhd_kytt_GR_kytt SheetFill Nhap 5 Check lại grid expectgriddata #ctl00_ContentPlaceHolder1_kytt_ctr_bhhd_kytt_GR_kytt SheetCheck
17/04/2026 - 2
-
Cập nhập logic Fill Grid và Assert Grid cho action
fillGrid. Format Value:Format Mô 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:Format Mô 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_ID Step_No Description Action Locator Value NHAP 4 Nhập dữ liệu row1 fillFullData Data
25/04/2026
1. Hỗ trợ expected và prompt trong Value
handleDialog và setAutoDialog giờ parse Value theo format mở rộng
| Value | Hành vi |
|---|---|
accept | Accept dialog (như cũ) |
dismiss | Dismiss 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).
| Value | Hà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
- 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
- Action:
| TC_ID | Step_No | Description | Action | Locator | Value |
|---|---|---|---|---|---|
| CHON | 1 | Vào trang menu | goto | ${MENU} | |
| CHON | 2 | Chọn menu và mở popup | gotoMenu | Hợp đồng gốc,Bảo hiểm xe cơ giới,Khai báo mã,Thông tin về xe,Loại xe | |
| NHAP | 3 | Bắt auto dialog error | setAutoDialog | error | |
| NHAP | 4 | Mở màn hình upload file | waitForNewPageAfterClick | #ctl00_ContentPlaceHolder1_dia | |
| NHAP | 5 | Upload file | upload | #ctl00_ContentPlaceHolder1_chon_file | imports/xe_loai.xls |
| NHAP | 6 | Click mở | click | button:Mở | |
| NHAP | 7 | Kiểm tra bản ghi trên lưới | wait | 10000 |