मैं इंस्ट्रूमेंट्स ऑटोमेशन में एक स्क्रीनशॉट सहेज रहा हूं, लेकिन उस स्क्रीनशॉट में कुछ नियंत्रण गायब हैं। ऐसा लगता है कि प्रोग्रामेटिक रूप से जोड़े गए नियंत्रण "अनदेखा" हैं।इंस्ट्रूमेंट्स ऑटोमेशन स्क्रीनशॉट प्रोग्रामेटिक रूप से जोड़े गए नियंत्रणों को अनदेखा करता है
मैं इसे कैसे ठीक कर सकता हूं?
सिम्युलेटर में मैनुअल स्क्रीनशॉट: (पीला बॉक्स ध्यान दें)
स्क्रीनशॉट उपकरण में स्वचालन:
स्वचालन स्क्रिप्ट:
var target = UIATarget.localTarget();
target.delay(0.5)
target.captureScreenWithName("screenshot1.png");
मैंने एक्सकोड (सार्वभौमिक, उद्देश्य-सी) में एक नया एकल दृश्य अनुप्रयोग बनाया। मैंने स्टोरीबोर्ड में ऑटो लेआउट के लिए कुछ बाधाओं वाला एक बटन और एक लेबल जोड़ा।
मैं पीला बटन प्रोग्राम के रूप में जोड़ने के लिए इस कोड कहा:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton *b = [[UIButton alloc] init];
b.backgroundColor = [UIColor yellowColor];
[b setTitle:@"Extra" forState:UIControlStateNormal];
[b setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:b];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:b attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTopMargin multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:b attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailingMargin multiplier:1.0 constant:0.0]];
[self.view setNeedsUpdateConstraints];
// Correction: - initially I used the line below, but that was wrong
// The problem is not solved with using setNeedsUpdateConstraints.
// [self.view updateConstraints];
}
मैं Xcode संस्करण 7.1.1 (7B1005) का उपयोग कर रहा है, मेरे ओएस एल कैप्टन 10.11.1 (15B42) है। मुझे पता है कि यह पिछले संस्करणों में काम करता था, क्योंकि मैं अपने ऐप के स्क्रीनशॉट के लिए ui-screen-shooter का उपयोग करता हूं और समस्याएं अब होती हैं और इससे पहले काम किया जाता है। यह यूई-स्क्रीन-शूटर के साथ कोई समस्या नहीं है, क्योंकि मैं इसे अकेले उपकरणों स्वचालन के साथ पुन: उत्पन्न कर सकता हूं।
मैं इसके बारे में क्या कर सकता हूं?
संपादित करें:
एक स्टोरीबोर्ड में नियंत्रण के बीच का अंतर और मैन्युअल रूप से बनाए गए ऑब्जेक्ट ID है, जो एक स्टोरीबोर्ड स्रोत में देख सकते हैं हो सकता है। यदि यह समस्या होगी, तो क्या मैं मैन्युअल रूप से बनाए गए नियंत्रणों के लिए id
सेट कर सकता हूं? (या यह, खो दिया एक बार दृश्य स्टोरीबोर्ड से पढ़ रहा है?)
संपादित करें 2: (के माध्यम से ObjC/क्रम)
मैं दृश्य नियंत्रक के दृश्य में तत्वों के सभी गुण दिलवाया और संपत्ति मूल्यों की तुलना दो बटनों में से। वहाँ थोड़ा अंतर हैं: (समान प्रविष्टियाँ शामिल नहीं होंगे)
Button from Storyboard | Manual Button ----------------------------------------------------------------- "_defaultRenderingMode" = 2; | "_defaultRenderingMode" = 1; text = Button; | text = Extra; | (several position values slightly different) | description contains: | "autoresize = RM+BM;" | | backgroundColorSystemColorName = yellowColor;
संपादित करें 3:
target.logElementTree()
के उत्पादन का एक स्क्रीनशॉट:
संपादित करें 4:
मैंने
[UIButton appearance].backgroundColor = [UIColor yellowColor];
जोड़ा
और सभी बटनों में अब पीले रंग की पृष्ठभूमि है, हालांकि, "अतिरिक्त" बटन स्क्रीनशॉट में नहीं है।
मैं मुख्य रूप से कस्टम उपस्थिति पर केंद्रित नहीं हूं।मैंने
UIButton *b = [UIButton buttonWithType:UIButtonTypeSystem];
भी कोशिश की ताकि बटन सामान्य नीले बटन की तरह हो। अभी भी बटन स्वचालन स्क्रीनशॉट में प्रकट नहीं होता है।
संपादित 5:
मामले में यह प्रासंगिक है: मैं स्वचालन स्क्रिप्ट से नियंत्रणों पर पहुंचने और नल कर सकते हैं - (एक और अनुप्रयोग, नहीं इस परीक्षण कोड से) उदाहरण के लिए:
target.frontMostApp().mainWindow().buttons()[25].tap()
नलियां संसाधित की जाती हैं, इसलिए स्वचालन स्क्रिप्ट नियंत्रण तक पहुंच सकती है।
संपादित करें 6: मैंने ऐप्पल की बग्रेपोर्ट प्रणाली पर एक बग रिपोर्ट बनाई है। यदि आप इसे पुन: उत्पन्न कर सकते हैं, तो ऐसा करना अच्छा हो सकता है (कम से कम मैं एप्पल में बग रिपोर्टिंग के इच्छित उपयोग को समझता हूं)।
संपादित 7: (आपके उत्तर के लिए quellish के लिए धन्यवाद - यहां विचारों की मेरी पहली लहर प्रसंस्करण :) मैंने कोड में एक त्रुटि को सही किया - मैंने [self.view updateConstraints];
कहा, लेकिन यह [self.view setNeedsUpdateConstraints];
होना चाहिए। हालांकि, स्वचालन स्क्रीनशॉट परिणामों पर कोई प्रभाव नहीं पड़ा।
मैं सोच रहा था कि क्या बाधाओं को अद्यतन किया गया था और updateViewConstraints
और कुछ अन्य लोगों को कॉल लॉग इन किया गया था।
viewDidLoad
viewWillAppear
updateViewConstraints
viewWillLayoutSubviews
viewWillLayoutSubviews
viewDidAppear
तो जब मैं viewDidLoad
में बटन और बाधाओं जोड़ सकते हैं और updateViewConstraints
कहा जाता है, मुझे लगता है है कि सभी बाधाओं जब viewDidAppear
कहा जाता है निपटाया जाता है: यह है कि यह कैसे एप्लिकेशन लोड कर रहा है लॉग होता है है।
मैं viewDidAppear
में इस का उपयोग करते हुए एक त्वरित परीक्षण किया: (अभी तक सुनिश्चित नहीं हैं, कि क्या यह जाने का रास्ता है - मैं पहुँच के साथ थोड़ा अनुभव है।)
_extraButton.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(_extraButton.frame, self.view);
स्वचालन स्क्रीनशॉट सफेद बनी हुई है।
हालांकि यह दिलचस्प है कि तत्व पेड़ में अतिरिक्त बटन का स्क्रीनशॉट भाग सही स्थान दिखाता है। तो मुझे लगता है कि स्वचालन ने सही स्थिति उठाई है।
) 'logElementTree से उत्पादन (' के साथ अपने प्रश्न अपडेट करें। – quellish
@quellish यह था - जब मैं "अतिरिक्त" बटन के साथ लाइन का चयन करें, उस बटन के छोटे स्क्रीनशॉट सही पर दिखाया गया है। क्षेत्र मेल खाता है, लेकिन बटन वहां नहीं है।सिम्युलेटर स्क्रीनशॉट में बटन में सफेद टेक्स्ट रंग होता है। हालांकि, उन ऐप्स में जिन्हें मैं अंततः "स्क्रीनशूट" करना चाहता हूं, उनमें तत्वों का काला टेक्स्ट रंग होता है लेकिन पाठ स्क्रीनशॉट में पाठ दिखाई नहीं देता है। –
यह लगभग निश्चित रूप से एक समय मुद्दा है। यदि आप बटन को स्टाइल करने के लिए यूआईपीपीरेंस का उपयोग करते हैं तो क्या आप अलग-अलग व्यवहार देखते हैं? – quellish