Quét và tìm phần tử

Không xem được? Mở trên YouTube

Vì sao các phần mềm tương tác Facebook hay TikTok chạy được trên mọi độ phân giải và nhiều phiên bản Android, trong khi kịch bản chỉ dùng tìm hình rất dễ trượt khi đổi thiết bị? Câu trả lời là UI Automation: quét và tìm phần tử giao diện thay vì tìm theo hình.

Bài nâng cao này hướng dẫn quét phần tử, tạo bộ lọc tìm đúng nút, tìm trực tiếp không cần quét, lấy văn bản, SetText vào ô nhập và nhấn thẳng vào phần tử thay vì theo tọa độ.

Bạn sẽ học được
  • UI Automation giải quyết vấn đề gì và hạn chế của nó
  • Quét và xem danh sách phần tử trên màn hình
  • Tạo bộ lọc: giữ thuộc tính ổn định, bỏ thuộc tính hay thay đổi
  • Một lệnh chạy được trên nhiều độ phân giải
  • Tìm trực tiếp không cần quét để tiết kiệm thời gian
  • Lấy văn bản, SetText và nhấn trực tiếp vào phần tử

Mục lục video

  1. 00:00UI Automation giải quyết vấn đề gì
  2. 01:05Quét thử và xuất phần tử
  3. 02:04Thử với độ phân giải khác
  4. 03:46Tạo bộ lọc tìm phần tử
  5. 06:40Tìm trong danh sách phần tử đã quét
  6. 09:09Tìm trực tiếp không cần quét
  7. 11:52Lấy văn bản của phần tử
  8. 13:22SetText vào ô nhập
  9. 17:45Nhấn trực tiếp vào phần tử
  10. 19:42Ví dụ: lấy thư nháp
  11. 20:40Lọc thô và tọa độ tâm
  12. 23:53Lấy văn bản theo bộ lọc

UI Automation giải quyết vấn đề gì ▶ 00:00

Nếu chỉ dùng tìm hình ảnh thuần túy, khi đổi độ phân giải hoặc đổi thiết bị, hình rất dễ bị trượt, không tìm thấy. Quét và tìm phần tử sinh ra để giải quyết vấn đề này.

⚠️ Lưu ý:Hạn chế: chỉ xuất được phần tử của các ứng dụng thông thường. Game thường không render dựa trên các phần tử này nên không xuất được phần tử.

Quét thử và xem phần tử ▶ 01:05

Nhấn Quét thử và nhớ bật xuất hình ảnh. Bỏ bộ lọc để thấy toàn bộ phần tử trên màn hình Android. Nhấn vào một phần tử, tool tự khoanh vùng vị trí của nó.

Lưu ý: cùng một điểm trên màn hình có thể có rất nhiều phần tử lồng nhau.

Thử với độ phân giải khác ▶ 02:04

Để kiểm chứng, tác giả thêm một tab khác, tắt đồng bộ và cài độ phân giải khác, rồi làm một lệnh tìm và nhấn nút số 6 cho cả hai tab.

Tạo bộ lọc tìm phần tử ▶ 03:46

Thêm bộ lọc có nhận thao tác bấm và bật lọc thử: chỉ còn các phần tử bấm được. Vùng bấm của nút số 6 rộng hơn nhiều so với chữ số. Đẩy toàn bộ thuộc tính của phần tử đó sang bộ lọc, rồi chọn lọc:

  • Bỏ đường dẫn đầy đủ: phụ thuộc nhánh giao diện, không ổn định.
  • Giữ class: thường ổn định.
  • Giữ mô tả: thuộc tính quyết định, chỉ một phần tử có mô tả là số 6.
  • Giữ ID, gói ứng dụng (phần tử nằm trong ứng dụng nào), có thể bấm.
  • Bỏ kích thước: ở màn hình dọc và ngang kích thước khác nhau, muốn chạy nhiều độ phân giải thì phải bỏ.

💡 Mẹo:Tắt bớt thuộc tính không quan trọng: bộ lọc quá nhiều điều kiện vừa tốn thời gian lọc vừa dễ làm tìm không thấy.

Đặt tên bộ lọc (ví dụ “số 6”) để khi đọc tập lệnh biết đang tìm nút nào. Lọc thử chỉ còn một kết quả, rồi nhấn thêm bộ lọc cho tìm phần tử.

Tìm trong danh sách phần tử đã quét ▶ 06:40

Lệnh tìm trong danh sách phần tử đã quét cần có lệnh quét chạy trước, giống như chụp màn hình trước khi tìm hình.

Lần chạy đầu, tọa độ tìm đúng nhưng nhấn bị lệch sang nút khác. Nguyên nhân là tab đang bị ép kích thước khác với kích thước thật; sửa lại thì nhấn đúng ở cả hai tab. Thử thêm một độ phân giải khác, lệnh vẫn tìm đúng nút số 6 mà không phải cắt hình nào.

Tìm trực tiếp không cần quét ▶ 09:09

Mỗi lần quét, lượng phần tử rất lớn được gửi từ điện thoại xuống máy tính, vừa tốn lưu lượng vừa tốn thời gian. Với tác vụ tìm rồi nhấn, hãy dùng tìm trực tiếp: gần như không có độ trễ, tìm và nhấn 5 lần rất nhanh.

Lệnh quét vẫn hữu ích khi cần lưu kết quả vào văn bản để xử lý, hoặc quét một lần rồi tìm hàng loạt để ra logic. Có thể lọc phần tử không hiển thị (nằm ngoài màn hình). Số lần tìm, giãn cách và các thao tác chung giống lệnh tìm hình.

Lấy văn bản của phần tử ▶ 11:52

Bỏ hết bộ lọc để xem phần tử nào có văn bản. Phần tử có thể có nhiều loại văn bản: Text, mô tả, ID. Bạn lọc để tìm phần tử rồi xuất nội dung đó vào một biến.

SetText vào ô nhập ▶ 13:22

Bình thường, muốn thay nội dung một ô nhập bạn phải nhấn giữ nút xóa rồi gõ từng chữ. SetText thay trực tiếp văn bản trong ô bằng văn bản khác.

  1. Quét màn hình có ô nhập. Nếu không ra kết quả, kiểm tra xem có đang áp bộ lọc của màn hình trước không.
  2. Thêm bộ lọc sửa được (có thể nhập). Màn hình chỉ có một ô nhập thì chỉ cần bộ lọc này là tìm ra.
  3. Thêm lệnh tìm, nếu tìm được thì SetText văn bản cần điền.

Trong video, văn bản dài được thay ngay lập tức. Vì bộ lọc chỉ có “có thể nhập”, ô nào nhập được thì lệnh sửa ô đó, kể cả ô tìm kiếm ứng dụng.

Chụp hình, lưu phần tử và nhấn trực tiếp ▶ 17:45

  • Chụp hình phần tử: cắt hình trên ảnh chụp màn hình theo vị trí phần tử (vùng khung đỏ).
  • Lưu phần tử: lưu phần tử dạng văn bản vào biến để xử lý sau.
  • Thao tác nút: mô phỏng nhấn vào nút mà không nhấn qua tọa độ.

Khi tab bị ép kích thước, nhấn theo tọa độ có thể lệch dù tọa độ tìm đúng. Thao tác nút gửi thẳng hàm nhấn vào phần tử thay vì gửi thao tác chuột, nên không bị lệch.

Ví dụ: lấy văn bản tin nhắn ▶ 19:42

Ứng dụng: lấy nội dung tin nhắn gửi về, thư nháp hoặc mã OTP. Dùng lọc thô (gõ thử một chữ) để nhanh chóng tìm ra phần tử chứa nội dung tin nhắn. Mỗi tin nhắn có văn bản khác nhau nên phải bỏ thuộc tính văn bản khỏi bộ lọc.

Lọc thô và tọa độ tâm ▶ 20:40

Lọc thô chỉ để tìm nhanh phần tử, nhớ tắt khi chạy thật. Android hay có các phần tử trùng nhau: hai phần tử gần như cùng thuộc tính, chỉ khác đường dẫn tuyệt đối và tọa độ tâm. Khi đó cần thêm điều kiện để chọn đúng phần tử, ví dụ phần tử phía trên.

Lấy văn bản theo bộ lọc ▶ 23:53

Dùng bộ lọc vừa tạo, lấy văn bản và lưu vào biến. Đổi nội dung tin nhắn rồi chạy lại, lệnh vẫn lấy đúng văn bản mới, và ở độ phân giải khác cũng lấy được bình thường.

⚠️ Lưu ý:Lần chạy thử đầu báo không tìm thấy vì vẫn còn bật lọc thô. Tắt lọc thô trước khi chạy.

Các lệnh này giao tiếp hoàn toàn qua server riêng chứ không qua ADB, nên nhanh hơn nhiều so với các tool phải dump màn hình qua ADB.

Câu hỏi thường gặp

UI Automation có dùng được cho game không?

Thường là không. Game không render dựa trên các phần tử giao diện nên không xuất được phần tử; UI Automation dành cho ứng dụng thông thường.

Làm sao để một lệnh tìm phần tử chạy được trên nhiều độ phân giải?

Giữ các thuộc tính ổn định như class, mô tả, ID, gói ứng dụng; bỏ đường dẫn đầy đủ và kích thước vì chúng thay đổi theo giao diện và độ phân giải.

Khi nào nên tìm trực tiếp thay vì quét?

Khi chỉ cần tìm rồi nhấn. Quét gửi rất nhiều dữ liệu từ điện thoại xuống máy tính nên tốn thời gian; tìm trực tiếp gần như không có độ trễ.

SetText khác gì nhập văn bản thông thường?

SetText thay trực tiếp nội dung ô nhập, không cần xóa rồi gõ lại từng chữ.

Nội dung video (phụ đề)

UI Automation giải quyết vấn đề gì

Rồi, hôm nay sẽ học đến một cái nâng cao hơn, đó là quét phần tử và tìm phần tử. Thì các bạn là có thể thấy những cái phần mềm ví dụ như tương tác Facebook hay là TikTok ấy thì nó có thể chạy trên mọi cái độ phân giải khác nhau và chạy trên nhiều phiên bản Android, thì nó làm được là do đâu? Nếu như chúng ta chỉ dùng cái tìm hình ảnh thuần túy như thế này thì khi mà nó thay đổi cái độ phân giải hoặc là thay đổi cái thiết bị khác thì là cái hình ảnh này rất dễ là bị trượt, không tìm thấy. Thì thằng này nó sinh ra để giải quyết cái vấn đề đấy. Tuy nhiên nó có một hạn chế này: nó sẽ chỉ xuất được những cái phần tử của những cái ứng dụng thông thường này. Còn nếu mà của những cái ứng dụng như là game ấy thì là nó sẽ không phải là render dựa trên những phần tử này, thì chúng ta sẽ không xuất được phần tử. Thì để xuất phần tử, bây giờ các bạn nhấn vào cái quét thử này

Quét thử và xuất phần tử

và nhớ bật cái xuất hình ảnh lên nha. Mình sẽ bỏ cái bộ lọc đi. Đây, thì đây nó là những cái phần tử trên cái màn hình Android này. Các bạn có thể thấy là nó rất nhiều cái phần tử khác nhau. Các bạn nhấn vào nó sẽ tự khoanh vùng cái... đây. Tự khoanh vùng cái vị trí đó. Cùng một thằng này đấy, cùng là một cái điểm này thôi nhưng mà nó lại lồng nhau rất nhiều cái phần tử khác nhau. Thì cái thằng phần tử này nó... thế này. Ví dụ như là mình thêm một cái thằng tab này, tab khác nữa. Tắt đồng bộ đi.

Thử với độ phân giải khác

Mình sẽ cài thằng này cái độ phân giải khác và mình sẽ áp dụng thử xem là cái tìm phần tử này nó có thể sử dụng cho cái tab khác nhau được không nhỉ. Đây, bây giờ mình sẽ làm một cái lệnh để tìm... tìm nút bấm. Hai cái tab này với hai cái độ phân giải khác nhau. Mình sẽ tìm thử cái số 6 đi và nhấn vào cái số 6. Đấy, cùng một lệnh mà chạy với hai cái độ phân giải khác nhau. Xem nó có tìm được không nhỉ? Tạo cái lệnh mới đi. Bây giờ mình sẽ quét thử xem là cái phần tử. Mình sẽ lọc thử cái số 6 này. Thì nó như vừa nãy mình cũng nói này, một cái này nhưng mà nó có thể có nhiều cái phần tử lồng lên nhau. Đây mình sẽ phải tìm cái phần tử có thể nhấn vào. Nếu mà tìm thuần vị trí này cũng có thể nhấn vào thôi. Bây giờ mình sẽ tìm cái cao hơn, cao cấp hơn. Nó là cái phần tử có thể nhấn vào, để lát nữa mình sẽ gửi một cái thao tác nhấn luôn chứ không phải nhấn theo tọa độ nữa. Không cần biết nó là tọa độ nào ha. Đây mình sẽ thêm một cái bộ lọc là cái phần tử có nhận thao tác bấm.

Tạo bộ lọc tìm phần tử

Rồi mình bật cái lọc thử lên nha, thì nó sẽ ra những cái phần tử mà chúng ta có thể nhấn vào. Đây, cái chữ thì rất bé thôi nhưng mà cái phần có thể nhấn vào rất là rộng. Đây là cái thằng số 6 này. Đúng không? Bây giờ mình sẽ đẩy tất cả thuộc tính của thằng số 6 sang bên này. Rồi nếu mà áp dụng tất cả thuộc tính này thì chắc chắn nó sẽ quét ra một cái thằng số 6 này. Tuy nhiên này, các bạn để ý này, nó có một vài thuộc tính nó sẽ thay đổi. Ví dụ như cái đường dẫn đầy đủ này. Ví dụ như mình nhấn vào này. Đấy, đường dẫn là lúc chúng ta lấy thì các cái nhánh giao diện của nó không có nút này thì cái đường dẫn này nó có thể khác, không ổn định, ta bỏ đi. À, class này, thằng này thường nó ổn định này, giữ lại. Không có văn bản... không văn bản thì nhiều thằng không có văn bản phải không? Mô tả đây. Thằng mô tả này. Thằng này là thằng ăn tiền này. Thằng này này chỉ có một thằng là có số 6 thôi. Nó chỉ có một thằng thôi đúng không? ID này. Rồi giữ ID đi. Gói ứng dụng này, đó là cái phần tử nằm trong ứng dụng nào đấy. Rồi cứ giữ lại cũng được. Có thể bấm này. Ok. Rồi những cái thằng này không quan trọng lắm, mình tắt bớt đi để bộ lọc của chúng ta nó không quá nhiều, cái lọc này nó vừa tốn cái thời gian lọc mà có thể là nó sẽ khiến chúng ta tìm nó bị không thấy. Chẳng hạn thằng này, nếu mà muốn chạy trên nhiều độ phân giải thì thằng này chắc chắn phải bỏ thôi. Vì là nó là cái kích thước. Kích thước mà nó nằm trên cái thằng này, trên cái thằng nằm dọc này thì là nó sẽ không bằng cái thằng nằm ngang này đúng không? Bỏ đi. Rồi bây giờ chúng ta đã có một cái bộ lọc như này. Đây, bộ lọc hiện tại này. Mình sẽ đặt tên cái bộ lọc: số 6. Cái tên này thì để chúng ta dễ nhận biết rồi. Khi vào cái tập lệnh này chúng ta sẽ biết được là chúng ta đang tìm cái nút nào. Sau khi có bộ lọc này các bạn xem thử bên này này. Đấy, nó chỉ còn một kết quả này. Các bạn nhấn thêm bộ lọc cho tìm phần tử. Nhấn này. Rồi bây giờ cái bộ lọc này nó đã được đẩy sang cái tìm phần tử này. Nút số 6 đây. Bây giờ mình sẽ làm cái lệnh tìm, sau đó nhấn vào phần tử. Đúng không?

Tìm trong danh sách phần tử đã quét

Thằng này là thằng quét. Bên dưới này chúng ta đang tìm trong danh sách phần tử đã quét, thì chúng ta phải có thằng quét trước, giống như chụp màn hình trước khi tìm hình nhá. Bây giờ mình sẽ chạy thử này. Rồi, tại sao lại nhấn vào số 1? Mình tìm xem là nó sai... Bộ lọc nó sai ở đâu nhỉ? 528 172... 528 172, nó ở đây, nó đã tìm đúng cái tọa độ nhưng mà khi nhấn này nó lại bị lệch sang bên này. Bây giờ chúng ta sẽ sang thử ở đây. Chúng ta đang ép cái kích thước... kích thước hiện tại là 640. Tuy nhiên là chúng ta ép nó về kích thước 1000, nó bị lệch. Giờ chạy thử này. Rồi, bây giờ đã nhấn đúng hai vị trí. Bây giờ mình sẽ chạy thử mấy thằng đầu tiên này. Này, thằng này nó là... bật gỡ lỗi lên này. Đó, cùng là một cái lệnh đấy thì chúng ta có thể chạy được trên nhiều cái độ phân giải khác nhau. Tiếp tục cái thằng này, cài thử với độ phân giải khác nữa, xem là... xem có chạy được không nhỉ? Đó các bạn thấy này, nó tìm đúng cái vị trí của thằng số 6 này, bất kỳ cái độ phân giải nào, mà chúng ta không phải cắt hình gì cả. Thì đấy là chúng ta tìm trong danh sách phần tử đã quét.

Tìm trực tiếp không cần quét

Còn nếu mà không muốn quét thì sao? Bởi vì là cái lệnh quét này, lệnh quét này mỗi lần chạy là nó quét rất là nhiều cái này và nó gửi từ trên điện thoại xuống máy tính, vừa tốn cái lưu lượng mà vừa tốn thời gian đúng không? Thì chúng ta có thể tìm trực tiếp, không cần quét này. Cũng có thể lưu cái kết quả vào văn bản để chúng ta xử lý biến, hoặc là chúng ta quét xong chúng ta tìm hàng loạt rồi ra logic thôi. Còn nếu mà với cái tác vụ tìm và nhấn vào phần tử chúng ta có thể tìm trực tiếp luôn. Đấy, xem này, rất nhanh đúng không? Đó, gần như là không có cái... này luôn. Thì đối với những cái tool mà phải dump cái màn hình ra ấy mà chạy qua ADB đấy thì để có thể quét được cái phần tử này, nó chạy nhấn... vào... Đó, tìm nhấn vào 5 lần, tìm 5 lần là nhấn rất nhanh luôn. Mình thấy là cái tìm phần tử và nhấn vào phần tử. Còn cái quét này chúng ta có thể tạo lệnh quét, lọc không hiển thị này. Lọc thử này. Đó, không hiển thị thì nó là những cái phần tử mà nó nằm phía ngoài màn hình. Cái tọa độ của nó nằm ở bên ngoài màn hình ấy. Đây, đây là đang quét... thằng nào... lọc này, lọc không chuẩn lắm. Rồi, bỏ lọc, xem lại sau. Cái phần số lần tìm và giãn cách này thì tương tự của tìm hình thôi. Các bạn xem ở phần tìm hình nhá. Còn các cái thao tác này chúng ta có thể thao tác tương tự

Lấy văn bản của phần tử

tìm hình, và có những cái thao tác với phần tử đặc biệt. Ví dụ như tìm và lấy ra văn bản của nó. Đây mình sẽ tìm một cái cái văn bản này, thì nó là cái phần này này, phần văn bản này. Mình sẽ xóa toàn bộ bộ lọc đi, xem cái thằng nào có thể lấy ra được văn bản nha. Thằng không có văn bản đây, cho nó khác, nó rỗng. Đây những cái thằng này là có văn bản này. Đó, văn bản là ABC này, thì chúng ta có thể lọc từ những cái bộ lọc khác để tìm ra phần tử và xuất cái văn bản này để lưu vào một cái biến. Văn bản này thì đây nó có nhiều loại văn bản. Đây là cái phần Text này. Text này, đó là cái văn bản này này. Hoặc cái mô tả này nó là phần này này. Đấy. ID này. Đấy. Thì chúng ta có thể xuất những cái nội dung của cái phần tử mà chúng ta tìm thấy để lưu vào một cái biến,

SetText vào ô nhập

hoặc là SetText. Cái hàm SetText này thì khá là hay. Chúng ta bình thường là chúng ta phải nhập văn bản vào một cái ô đúng không? Bây giờ mình sẽ làm một cái thao tác là, đây, mình sẽ tìm cái ô nhập này và mình thay trực tiếp cái văn bản này bằng cái văn bản khác, không cần nhập ha. Rồi bây giờ ta sẽ quét cái phần tử của cái màn hình này. Đấy, không... không quét được. Có vẻ như do chúng ta có cái bàn phím nó đang hiển thị lên. À không, giờ mình đang để cái bộ lọc... bộ lọc của cái màn hình trước mà áp dụng lọc thử luôn vào cái màn hình này, nó không ra kết quả. À, bây giờ là cái ô này là có thể nhập văn bản. Mình sẽ thêm một cái bộ lọc "sửa được" này. Lọc thử, thấy chưa? Bây giờ là nó đã ra cái phần tử này rồi. Bây giờ chúng ta phải đẩy cái thuộc tính sang. Tuy nhiên là với cái màn hình này chỉ có một ô có thể nhập thì thực tế là chúng ta chỉ cần một cái "có thể nhập" là nó đã tìm ra rồi. Sửa được này. Có thể bấm này... đâu nhỉ? Sửa được rồi. Nút... tin nhắn chẳng hạn. Bây giờ mình sẽ thêm đây. Bây giờ chúng ta có cái bộ lọc để tìm cái thằng gửi... này. Nếu tìm được thì điền cái văn bản vào đây. Cái gì chấm VN chẳng hạn. Bây giờ mình sẽ điền với văn bản khá dài vào. Như bình thường chúng ta sẽ phải nhấn giữ những cái nút xóa này. Sau đó chúng ta gõ từng chữ vào đúng không? Rồi bây giờ mình sẽ thêm lệnh này vào đây, vô hiệu hóa thằng trước đi. Bây giờ ta sẽ chạy thử. Đó các bạn thấy không? Đây, đã bị sửa luôn thành cái thằng này. Thử cái thằng này xem nhá. Ở cái tìm này chúng ta chỉ tìm cái bộ lọc "có thể nhập" thôi, nên là cứ có cái ô nào nhập được, ô nào có thể sửa thì nó sẽ sửa luôn. Đấy. Đây mình đang để chạy 5 lần này. Một lần thôi đủ, có thể nhập. Ví dụ như mình sẽ nhập trong cái khác chẳng hạn. Mình nhập trong cái tìm kiếm, tìm kiếm ứng dụng này xem nào. Đó, nó sẽ thay đổi luôn cái văn bản trong cái ô nhập và chúng ta không cần phải gõ lại, không cần phải xóa hay là gõ lại các cái văn bản nữa, mà chúng ta SetText luôn. Đó, đấy là cái SetText. Chụp hình phần tử thì là nó sẽ cắt cái hình trên cái ảnh chụp màn hình, theo cái vị trí của phần tử đây. Theo như cái hình này là trong cái ô đỏ này, nó cắt luôn cái hình trong ô đỏ này nhá. Hoặc là chúng ta có thể lưu... lưu phần tử thì nó, đây, nó sẽ lưu thành cái dạng văn bản như thế này vào trong cái biến để chúng ta xử lý sau.

Nhấn trực tiếp vào phần tử

Còn phần này... phần này thì nó sẽ kích hoạt cái thao tác mô phỏng thao tác nhấn vào nút, mô phỏng thao tác nhấn vào nút mà không phải nhấn qua tọa độ nha. Như vừa nãy thì chúng ta đang có một cái nhấn vào số 6 này. Ví dụ như chúng ta ép nó bị lệch đi hay như thế nào chẳng hạn. Nãy là cái tab nào đang bị lỗi nhỉ? Mình sẽ cho nó nhấn không cần tọa độ xem nào. Đây này, mình thử xem nha, chưa chắc là đã hoạt động. Rồi, đó. Các bạn có thể thấy này, cái tọa độ của nó ở đây, nó... tọa độ nó tìm đúng rồi, nhưng mà đôi khi cái nhấn theo tọa độ này, mà khi chúng ta ép cái kích thước này, có thể nó bị lệch đi chẳng hạn. Ta dùng cái này nó sẽ gửi lệnh nhấn trực tiếp vào phần tử, không phải là gửi cái lệnh thao tác chuột nữa, mà nó như là cái gửi cái hàm nhấn vào trong cái phần tử luôn. Đấy là cái thao tác nút. Còn cái lấy văn bản này như vừa nãy mình hướng dẫn rồi, thì nó ví dụ như chúng ta có thể có một cái tin nhắn gửi về chẳng hạn, mà chúng ta muốn lấy cái văn bản "cái gì chấm VN" này hay thư nháp này thì chúng ta làm thế nào, đấy, hoặc là cái OTP chẳng hạn.

Ví dụ: lấy thư nháp

Bây giờ mình sẽ làm một cái lệnh để lấy cái thư nháp đây ra nha. Hoặc là lấy cái văn bản trong đây ra. Mình sẽ làm cái lọc thô. Mình gõ thử chữ C chẳng hạn. Đây, thằng này nó là cái nội dung của tin nhắn phải không? Thì với mỗi một cái tin nhắn thì cái văn bản nó khác nhau nên chúng ta phải bỏ này đi. Giờ ta sẽ tìm theo cái thằng này. Bỏ đi, để chạy nhiều kích thước thì chắc chắn bỏ. Tắt cái lọc thô đi.

Lọc thô và tọa độ tâm

Lọc thô là để tìm cho nhanh ra cái phần tử thôi. Đây các bạn để ý này. Vấn đề là thằng này nó sẽ hay trùng nhau. Thằng Android này nó sẽ có nhiều cái trùng nhau. Khi các bạn quét như này, đây, mình để cái gì... Vấn đề là cái Android này thì tưởng nó sẽ như những cái phần tử như này, đó thì nó ra hai cái phần tử. Hai phần tử, thuộc tính nó thì khác cái là cái tọa độ XY này. Đây, không có chữ C, đây là gì? Hai thằng này thuộc tính cho nó gần như nhau luôn. Nó chỉ khác là cái đường dẫn tuyệt đối này và cái tọa độ tâm này. Thì lúc này chúng ta sẽ phải áp dụng những cái, ví dụ như thằng phía trên này chẳng hạn. Đây là thằng phía dưới rồi. Tìm thằng phía trên này và lấy cái văn bản của thằng phía trên này. Mình sẽ lấy chính xác theo bộ lọc này, nó có thể là không... tâm này là độ tâm tuyệt đối. Rồi, lấy nguyên cái bộ lọc này đi. Tin nhắn 1 này, lấy văn bản, lưu vào văn bản đấy. Rồi, đã lấy được "cái gì chấm VN" đúng không?

Lấy văn bản theo bộ lọc

Bây giờ ta sẽ sửa nó đi thành cái văn bản khác chẳng hạn. Xem là cái kết quả mà chúng ta lấy được là nó có ra được cái văn bản mới này không nha. Rồi, bây giờ báo là không tìm thấy chưa? Chạy lại xem nào. Đây, giờ chúng ta vẫn còn để cái lọc thô. Vẫn còn để lọc thô nên là nó có chữ C hay gì nó không ra. Rồi, đem lại sang bên này, sửa lại. Đó, đã lấy được cái văn bản này. Đổi thành văn bản khác, chạy thử nhé. Đó, các bạn thấy không? Đã lấy được cái văn bản hiển thị trên màn hình này, dựa vào cái phần tử. Thử sang cái thằng khác này xem nào. Thằng này thì có thể là nó vẫn cứ sai đấy nhỉ. Mình sẽ làm cho nó cái cấu trúc của nó tương tự cho cái thằng kia. Rồi, xem là nó có lấy được cái văn bản này không nha. Lấy được nha. Đấy, khác độ phân giải vẫn lấy được bình thường. Thì cái này các bạn có tìm hiểu qua về cái UI Automation ấy. Đấy, thì các bạn có thể thấy này, như những cái lệnh mà các bạn xem những cái tool khác ấy thì những cái lệnh thao tác này, những lệnh như này nó sẽ chạy rất lâu mà không được tốc độ nhanh. Các bạn test thử xem, như này nó chạy hoàn toàn cả cái server của thằng này giao tiếp chứ không qua ADB nha. Đấy.

Video hướng dẫn liên quan

Xem trọn bộ video hướng dẫn C-Auto Ultra trên YouTube →

MessengerZaloTelegramPhone