2010-09-06 7 views
14

के साथ हैंडलिंग अलर्ट मैं UIAutertView के साथ UIAlertView की उपस्थिति का परीक्षण करने की कोशिश कर रहा हूं लेकिन मेरे हैंडलर को कभी भी कॉल नहीं किया जाता है।UIAutomation

मेरी जावास्क्रिप्ट की शुरुआत में मैं लिखना:

UIATarget.onAlert = function onAlert(alert) { 
    UIALogger.logMessage("alertShown"); 
    return false; 
} 

मैं यह समझ के रूप में, मैं अपने onAlert समारोह निर्दिष्ट जैसे ही, यह एक alertView मेरे परीक्षण के दौरान प्रकट होता है जब कहा जाता है किया जाना चाहिए। तो मैं एक परीक्षण है कि एक alertView से पता चलता चलाने के लिए, यहाँ कोड है कि चेतावनी से पता चलता है:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:message message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
alertView.accessibilityLabel = @"alerte d'avertissement"; 
[alertView show]; 

मैं उपकरणों में अपने परीक्षण चलाने के लिए, चेतावनी दिखाई देता है, लेकिन मेरी हैंडलर कभी नहीं कहा जाता है। क्या कोई यूआईयूटोमेशन के साथ इवेंट हैंडलर का उपयोग करने में सक्षम है?

धन्यवाद, विन्सेंट।

उत्तर

19

प्रलेखन गलत लगता है। यह पता चला है कि आपकी लिपि चलाने के लिए एक ही थ्रेड पर अलर्ट प्रबंधित किए जाते हैं। तो अगर आप चाहते हैं चेतावनी हैंडलर के नाम से जाना, आप सोने के लिए, उदाहरण के लिए,

UIATarget.onAlert = { ... } 
window.buttons().triggerAlertButton.tap(); 
UIATarget.localTarget().delay(4); 

इसके अलावा, यह प्रतीत होता है कि चेतावनी का नाम और मान हमेशा शून्य पर सेट कर रहे हैं की जरूरत है। हालांकि, मैं पहले स्थिर पाठ तक पहुंचने में सक्षम था जिसमें चेतावनी का शीर्षक था।

+0

कई मामलों में, इस पाठ किया जा सकता है नाम संपत्ति की तरह इस्तेमाल किया ... मेरे लिए बटन, विचार, टेबल के लिए काम किया .... – yoosiba

+2

हाय, मुझे भी एक ही समस्या है। क्या आप मुझे बता सकते हैं कि आप सतर्क दृश्य से स्थिर txt कैसे प्राप्त करते हैं? अग्रिम धन्यवाद – cancerian

+1

@ onAlert' कॉलबैक फ़ंक्शन के अंदर @ कैंसरियन, 'alert.logElementTree() 'आज़माएं। वहां से, मैं देखता हूं कि 'alert.name() 'इसका शीर्षक है और' alert.elements() [2] .name() 'उसका' संदेश' है। – ma11hew28

0

मुझे "अलर्ट हैंडलर कभी भी बुलाया नहीं गया" समस्या भी थी। बस सेब के उपकरण को पुनरारंभ करना मेरे लिए हल किया गया :-)।

4

नीचे कोड मेरे लिए काम करता है। फ़ंक्शन अलर्ट को संभाला जा रहा है और लॉग पर "अलर्ट शॉउन" मुद्रित किया गया है।

var target = UIATarget.localTarget(); 
var application = target.frontMostApp(); 
var window = application.mainWindow(); 

UIATarget.onAlert = function onAlert(alert){ 
    UIALogger.logMessage("alert Shown");  
} 

target.frontMostApp().mainWindow().tableViews()[0] 
    .cells()["Fhgui"].buttons()["Images"].tap(); 
// Alert detected. Expressions for handling alerts 
// should be moved into the UIATarget.onAlert function definition. 
target.frontMostApp().alert().defaultButton().tap(); 
6

यकीन है कि यूआई स्वचालन स्क्रिप्ट अभी भी जब UIAlertView शो चल रहा है।

उदाहरण के लिए, आपकी स्क्रिप्ट के अंत तक निम्न पंक्ति जोड़ना इसे तब तक जारी रखेगा जब तक कोई अलर्ट पहुंच योग्य न हो या ऑब्जेक्ट रिज़ॉल्यूशन की अनुग्रह अवधि समाप्त हो जाए।

// Wait for UIAlert to appear so that UIATarget.onAlert gets called. 
target.frontMostApp().alert(); 

मैं इस अच्छी तरह से & पढ़ने Instruments User Guide: Automating UI Testing, जो मैं अत्यधिक यूआई स्वचालन के लिए एक परिचय के रूप करने की सलाह देते समझने के द्वारा पता लगा।

यह भी UIATarget Class Reference समीक्षा करने के लिए सहायक हो सकता है, विशेष रूप से तरीकों popTimeout, pushTimeout, setTimeout, timeout, और delay

+0

यह मेरी समस्या तय है। कॉल करने के लिए '.alert()' कॉलिंग 5 सेकंड तक (डिफ़ॉल्ट रूप से, 'target.setTimeout' के साथ कॉन्फ़िगर करने योग्य) तक प्रतीक्षा करेगी। –

0

उदा। - onAlert

var target = UIATarget.localTarget(); 
target.buttons()["ShowAlert"].tap() 
UIAtarget.onAlert = function onAlert(alert) 
{...} 

नहीं बुलाया जाता है -

उदा - onAlert

var target = UIATarget.localTarget(); 
UIAtarget.onAlert = function onAlert(alert) 
{......} 
target.buttons()["ShowAlert"].tap() 

या

#import "onAlert.js" 
var target = UIATarget.localTarget(); 
target.buttons()["ShowAlert"].tap() 

कहा जाता है इसे बाहर की कोशिश करो।

3

@vdaubry समाधान सरल है।

एप्पल प्रलेखन के अनुसार, आप मैन्युअल रूप से तो अलर्ट को संभालने के लिए चाहते हैं, तो आप true बजाय falseonAlert(alert)

UIATarget.onAlert = function onAlert(alert) { 
    UIALogger.logMessage("alertShown"); 
    return true; 
} 

@Drew क्रॉफर्ड में लौटना चाहिए देरी डिफ़ॉल्ट रूप से, क्योंकि काम नहीं करेगा बटन यूआई द्वारा क्लिक किया जाता है कर सकते हैं स्वचालन। दस्तावेज गलत नहीं है लेकिन यह स्पष्ट रूप से समझाया नहीं गया है।

0

निम्नलिखित स्निपेट XCode 6.3.1 & उपकरण (6.3.1 (6D1002)) पर मेरे लिए काम करता है: जब तत्व कोई नाम निर्दिष्ट है, लेकिन स्थिर पाठ के अंदर है

var target = UIATarget.localTarget(); 

    // Following line shows an internal alert with 'Cancel' & 'Continue' buttons 
    target.frontMostApp().mainWindow().buttons()["ShowAlert"].tap(); 

    // Handle an internal alert 
    UIATarget.onAlert = function onAlert(alert) { 
      return true; 
    } 

    // Perform Tap on alert. 
    target.frontMostApp().alert().buttons()["Continue"].tap();