Tôi chỉ mới bắt đầu với Giao diện người dùng tự động hóa cho ứng dụng iOS của mình và đã gặp sự cố. Tôi không thể đính kèm ảnh chụp màn hình vì vậy tôi sẽ cố gắng hết sức để mô tả kịch bản của mình.Yếu tố Tự động hóa giao diện người dùng iOS không tìm thấy phần tử phụ
Tôi đang xây dựng cho iOS 6.0 và đang sử dụng bảng phân cảnh. Ứng dụng sẽ khởi chạy với màn hình có bộ điều khiển điều hướng. Bộ điều khiển chế độ xem gốc chứa chế độ xem chính có 1 chế độ xem phụ UIView chiếm 60% màn hình dưới cùng và điều khiển phân đoạn nằm phía trên chế độ xem phụ đó. Tôi đã có thể định cấu hình khả năng truy cập cho chế độ xem chính (nhãn "chế độ xem chính"). Tôi sau đó có thể xác định vị trí yếu tố này trong bài kiểm tra của tôi không có vấn đề. Tuy nhiên, tôi hiện đang gặp sự cố khi tìm bộ điều khiển được phân đoạn. Vì vậy, tôi quyết định đăng xuất độ dài của "elements()" và "segementedControls()" từ phần tử "mainview" của tôi và độ dài của mỗi mảng là 0. Vì vậy, bằng cách nào đó khi thử nghiệm đang chạy ứng dụng của tôi, nó nói rằng không có phụ -trạng thái trên quan điểm chính của tôi.
Một điều cần lưu ý là tôi không thể tìm thấy bất kỳ phần trợ năng nào trong trình kiểm tra nhận dạng của trình chỉnh sửa bảng phân cảnh cho điều khiển được phân đoạn. Tuy nhiên, tôi tạm thời thêm một nút vào khung nhìn chính và cấu hình bằng nhãn trợ năng, chỉ để kiểm tra xem các phần tử() hoặc các nút() sau đó có hiển thị một phần tử cho khung nhìn chính khi chạy thử nghiệm của tôi không, nhưng các mảng này vẫn còn trở lại trống rỗng, ngay cả với nút.
Dưới đây là kịch bản của tôi:
var target = UIATarget.localTarget();
var app = target.frontMostApp();
function selectListView() {
var testName = "selectListView";
UIALogger.logStart(testName);
var view = app.mainWindow().elements()["mainview"];
if (!view.isValid()) {
UIALogger.logFail("Could not locate main view");
}
UIALogger.logMessage("Number of elements for sub element: " + view.elements().length);
var segmentedControl = view.segmentedControls()[0];
if (!segmentedControl.isValid()) {
UIALogger.logFail("Could not locate segmented control on physician collection parent view");
}
var listButton = segmentedControl.buttons()[1];
if (!listButton.isValid()) {
UIALogger.logFail("Could not locate list button on segemented controller on physician collection parent view");
}
UIALogger.logMessage("Tapping List button on physician collection view's segmented control");
listButton.tap();
UIALogger.logPass(testName);
}
selectListView();
Bất kỳ trợ giúp đánh giá rất cao.
CHỈNH SỬA: Tôi đã thêm mã này vào tập lệnh của mình để tìm kiếm toàn bộ phân cấp chế độ xem từ cửa sổ chính, đặt giá trị nhãn trợ năng cho điều khiển được phân đoạn của tôi trong initWithCoder (vì tôi dường như không thể đặt nó trong trình chỉnh sửa bảng phân cảnh cho một điều khiển phân đoạn, như tôi đã nói ở trên) và vẫn không thể tìm thấy nguyên tố này - nó như thể nó chỉ là không có trong hệ thống phân cấp xem, mặc dù đó là trên màn hình và chức năng tốt:
function traverse(root, name) {
if (root.name() == name) {
return root;
}
var elements = root.elements();
for (var i = 0; i < elements.length; i++) {
var e = elements[i];
var result = traverse(e, name);
if(result != null) {
return result;
}
}
return null;
}
function selectListView() {
var testName = "selectListView";
var segmentedControl = traverse(UIATarget.localTarget().frontMostApp().mainWindow(), "mysegementedcontrol");
if (segmentedControl == null) {
UIALogger.logMessage("Still could not find it");
}
....
}
EDIT: nhập cuộc gọi đến app.logElementTree() và vẫn không có kiểm soát phân đoạn nào trong tầm nhìn ("PhysicianCollectionParentView" là "chế độ xem chính" của tôi - bạn có thể thấy, không có phần tử con nào ở đó):
EDIT: Dưới đây là một số ảnh chụp màn hình. Đầu tiên cho thấy bộ điều khiển xem "chính" của tôi. Tiếp theo cho thấy rằng ngoài việc kiểm soát phân đoạn cũng có một subview UIView. Điểm thứ 3 hiển thị điểm vào cơ bản cho ứng dụng trong bảng phân cảnh của tôi.
Đây là phần mở rộng lớp cho "chủ nhân" điều khiển quan điểm của tôi ở đây, cho thấy thị trường tiêu thụ cho điều khiển phân đoạn và subview UIView khác:
@interface PhysicianCollectionMasterViewController()
@property (strong, nonatomic) IBOutlet UISegmentedControl *viewSelectionControl;
@property (strong, nonatomic) IBOutlet UIView *physicianCollectionView;
@end
EDIT: Đây là một cái gì đó rất thú vị - Tôi quyết định đi với một thương hiệu mới tập lệnh được tạo trong các công cụ và tận dụng lợi thế của tính năng ghi.Khi tôi nhấp vào kiểm soát phân đoạn của tôi, đây là hoạt Javascript nó tạo ra để cho tôi xem nó như thế nào đã truy cập một trong các nút trên điều khiển phân đoạn của tôi:
var target = UIATarget.localTarget();
target.frontMostApp().mainWindow().elements()["PhysicianCollectionParentView"].tapWithOptions({tapOffset:{x:0.45, y:0.04}});
Vì vậy, tôi đoán trường hợp xấu nhất tôi có thể đi với một cái gì đó như thế này , nhưng nó không có ý nghĩa với tôi rằng UI Automation chỉ không nghĩ rằng điều khiển tồn tại. Lạ quá. Phải có một cái gì đó tôi đang thiếu nhưng thiết lập của tôi là rất cơ bản tôi không thể tưởng tượng những gì nó có thể được.
upvoted để bạn có thể hopefulyl thêm bức ảnh scree bây giờ ... –
Hãy thử gọi 'app.logElementTree();' từ kịch bản của bạn nó sẽ đăng nhập cây nguyên tố hoàn chỉnh cho màn hình hiện tại . –
Cảm ơn bạn đã upvote! Cũng cảm ơn thông tin về logElementTree(). Tôi sẽ chạy nó và đăng đầu ra ở đây. – fogwolf