2013-02-11 20 views
5

मैं अभी अपने आईओएस ऐप के लिए यूआई ऑटोमेशन के साथ शुरू कर रहा हूं और मुझे पहले से ही परेशानी हो रही है। मैं स्क्रीन शॉट्स संलग्न करने में असमर्थ हूं इसलिए मैं अपने परिदृश्य का वर्णन करने के लिए अपनी पूरी कोशिश करूंगा।आईओएस यूआई ऑटोमेशन तत्व को कोई उप-तत्व नहीं मिला

मैं आईओएस 6.0 के लिए निर्माण कर रहा हूं और एक स्टोरीबोर्ड का उपयोग कर रहा हूं। ऐप नेविगेशन नियंत्रक के साथ एक स्क्रीन पर लॉन्च किया गया। रूट व्यू कंट्रोलर में एक मुख्य दृश्य होता है जिसमें 1 UIView सबव्यूव होता है जो स्क्रीन के नीचे 60% और उस सेगमेंट किए गए नियंत्रण को उस सबव्यू के ऊपर बैठता है। मैं मुख्य दृश्य (लेबल "मुख्यदृश्य") के लिए अभिगम्यता को कॉन्फ़िगर करने में सक्षम था। मैं फिर इस तत्व को मेरी परीक्षा में कोई समस्या नहीं ढूंढ पा रहा हूं। हालांकि, अब मुझे खंडित नियंत्रक खोजने में परेशानी हो रही है। तो मैंने अपने "मुख्यदृश्य" तत्व से "तत्व()" और "segementedControls()" की लंबाई को लॉग आउट करने का निर्णय लिया और प्रत्येक सरणी की लंबाई 0 है। तो किसी भी तरह जब परीक्षण मेरा ऐप चला रहा है तो यह कह रहा है कि कोई उप नहीं है मेरे मुख्य दृश्य पर -मेंट्स।

ध्यान देने योग्य एक और बात यह है कि मुझे खंडित नियंत्रण के लिए स्टोरीबोर्ड संपादक के पहचान निरीक्षक में कोई पहुंच-योग्यता अनुभाग नहीं मिला। हालांकि मैंने अस्थायी रूप से मेरे मुख्य दृश्य में एक बटन जोड़ा और कॉन्फ़िगर किया कि एक एक्सेसिबिलिटी लेबल के साथ, यह जांचने के लिए कि तत्व() या बटन() कॉल बाद में मेरे परीक्षण को चलाने के दौरान मुख्य दृश्य के लिए एक तत्व दिखाएंगे, लेकिन ये सरणी अभी भी थीं बटन के साथ भी खाली के रूप में लौट रहा है।

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(); 

किसी भी मदद की बहुत सराहना:

यहाँ मेरी स्क्रिप्ट है।

संपादित करें: मैंने मुख्य स्क्रिप्ट से पूरे दृश्य पदानुक्रम को खोजने के लिए अपनी स्क्रिप्ट में यह जोड़ा, initWithCoder में मेरे सेगमेंट किए गए नियंत्रण के लिए एक एक्सेसिबिलिटी लेबल मान सेट करें (क्योंकि मैं स्टोरीबोर्ड संपादक में एक सेट करने में सक्षम नहीं लगता एक सेगमेंट में बंटे नियंत्रण, जैसा कि मैंने पहले कहा गया है) और अभी भी तत्व नहीं मिला - यह जैसे कि यह दृश्य पदानुक्रम में सिर्फ नहीं है, हालांकि यह स्क्रीन पर और कार्य ठीक:

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"); 
} 

.... 
} 

संपादित करें: के लिए जोड़ा गया कॉल app.logElementTree() और अभी भी दृष्टि में कोई खंडित नियंत्रण नहीं है ("चिकित्सक कोलेक्शनपेर व्यू" मेरा "मुख्यदृश्य" है - आप देख सकते हैं, वहां कोई उप-तत्व नहीं है):

enter image description here

संपादित करें: यहां कुछ स्क्रीन शॉट हैं। पहला मेरा "मास्टर" व्यू कंट्रोलर दिखाता है। अगला दिखाता है कि खंडित नियंत्रण के अलावा एक UIView सबव्यू भी है। तीसरा मेरे स्टोरीबोर्ड में ऐप के लिए मूल प्रविष्टि बिंदु दिखाता है।

This shows the "master" view controller

This shows that in addition to the segmented control there is also an UIView subview

This shows the basic entry point part of my storyboard file

यहाँ, यहाँ मेरी "मास्टर" दृश्य नियंत्रक के लिए वर्ग विस्तार है सेगमेंट में बंटे नियंत्रण और अन्य UIView subview के लिए दुकानों दिखा:

@interface PhysicianCollectionMasterViewController() 
@property (strong, nonatomic) IBOutlet UISegmentedControl *viewSelectionControl; 
@property (strong, nonatomic) IBOutlet UIView *physicianCollectionView; 
@end 

संपादित करें: यहां कुछ दिलचस्प है - मैंने एक नया ब्रांड जाने का फैसला किया लिपि उपकरणों के भीतर बनाई गई और रिकॉर्ड फीचर का लाभ उठाएं।जब मैं अपने सेगमेंट में बंटे नियंत्रण पर क्लिक किया, यहाँ जावास्क्रिप्ट यह मुझे दिखाने के लिए कि यह कैसे मेरी हिस्सों में बंटा हुआ नियंत्रण पर बटनों में से एक पहुँचा था बनाया है:

var target = UIATarget.localTarget(); 

target.frontMostApp().mainWindow().elements()["PhysicianCollectionParentView"].tapWithOptions({tapOffset:{x:0.45, y:0.04}}); 

तो, मैं बुरी से बुरी हालत लगता है कि मैं कुछ इस तरह के साथ जा सकते हैं , लेकिन यह मुझे कोई समझ नहीं आता कि यूआई ऑटोमेशन सिर्फ यह नहीं सोचता कि नियंत्रण मौजूद है। कितना अजीब। मुझे कुछ याद आना चाहिए लेकिन मेरा सेटअप इतना बुनियादी है कि मैं कल्पना नहीं कर सकता कि यह क्या हो सकता है।

+0

अपवॉट किया गया है ताकि आप उम्मीद कर सकें कि अब स्क्री शॉट्स को जोड़ दें ... –

+0

अपनी स्क्रिप्ट से 'app.logElementTree();' कॉल करने का प्रयास करें, यह वर्तमान स्क्रीन के लिए पूर्ण तत्व पेड़ लॉग करेगा । –

+0

उपवास के लिए धन्यवाद! LogElementTree() पर जानकारी के लिए भी धन्यवाद। मैं इसे चलाऊंगा और यहां आउटपुट पोस्ट करूंगा। – fogwolf

उत्तर

4

आप एक तत्व और ध्वज के लिए accessibilityLabel सेट करते हैं यह isAccessibilityElement = YES; उस तत्व की subviews छिपे रहते हैं। स्वचालन के लिए, आप accessibilityIdentifier accessibilityLabel के बजाय अपने उद्देश्य सी कोड में, का उपयोग करना चाहिए और सेट isAccessibilityElement = NO;

के बाद physicianCollectionView प्रदान की गई है लेबल और पहुंच झंडा हटाने और बजाय ऐसा करते हैं: तत्व में पिछले तत्वों के लिए

physicianCollectionView.accessibilityIdentifier = @"PhysicianCollectionParentView"; 
physicianCollectionView.isAccessibilityElement = NO; 

पेड़, जिसमें उप दृश्य नहीं हैं, सेट isAccessibilityElement = YES;

+0

धन्यवाद मैं इसे एक शॉट दूंगा! – fogwolf

1

आप यह पहले से ही प्रयास नहीं किया है, तो आप अपनी स्क्रिप्ट की शुरुआत में देरी जोड़कर भी देख सकते:

UIATarget.localTarget().delay(3); 

मुझे लगता है कि यह संभव है कि अपने अनुप्रयोग से नहीं किया है प्रतिपादन/से पहले एनिमेट logElementTree() जिसे आपने ऊपर पोस्ट किया है। हम शुरुआत में और हमारी स्वचालित परीक्षण स्क्रिप्ट में प्रत्येक एप्लिकेशन संक्रमण के बीच देरी जोड़ते हैं ताकि यह सुनिश्चित किया जा सके कि स्क्रीन रेंडरिंग समाप्त हो गई है।

संपादित करें: एक परीक्षण अनुप्रयोग में अपने सेटअप के दौरान चारों ओर खिलवाड़ करने के बाद, मेरा मानना ​​है कि आपकी समस्या यह है कि आप UIView कि अपने विभाजित नियंत्रण होता है पर पहुंच क्षमता सक्षम कर रहे हैं है। पहुंच UIView पर अक्षम के साथ, मैं UISegmentedControl तत्व पेड़ में दिखाने के लिए प्राप्त करने में सक्षम हूँ, लेकिन एक बार मैं इसे सक्षम, UIView तो कोई बच्चों के साथ एक UIAElement के रूप में प्रदर्शित हो जाती है। मेरा सुझाव है कि युक्त UIView के लिए पहुंच अक्षम करना है, और केवल बेस नियंत्रण (जैसे बटन, टेबल व्यू सेल, या आपके सेगमेंट बटन नियंत्रण) के लिए पहुंच का उपयोग करना है।

+0

धन्यवाद। मैंने कोशिश की लेकिन फिर कोशिश करूँगा। आप किस अवधि की सिफारिश करते हैं? मैंने 5 सेकंड की कोशिश की लेकिन इसे देखने के लिए बस इसे टक्कर लगी होगी। Segemented नियंत्रण निश्चित रूप से दिखाई देता है लेकिन शायद पर्याप्त समय से देरी इसकी देखभाल करेगा। – fogwolf

+0

कृपया मूल उत्तर में संपादन देखें। – Bradford2000

+0

यह मेरे लिए भी ठीक करता है! मेरी मदद करने के लिए अपना बहुत समय लेने के लिए बहुत बहुत धन्यवाद। – fogwolf

संबंधित मुद्दे