كيف تزييف حدث لمسة برمجي إلى Uibutton؟
-
26-09-2019 - |
سؤال
أنا أكتب بعض اختبارات الوحدة ، وبسبب طبيعة هذا التطبيق بالذات ، من المهم أن أحصل على ارتفاع UI
سلسلة قدر الإمكان. لذا ، فإن ما أود القيام به هو تشغيل زر الضغط برمجيًا ، كما لو كان المستخدم قد ضغط على الزر في GUI
.
(نعم ، نعم - أنا يستطع فقط اتصل بـ IBAction
المحدد ، ولكن مرة أخرى ، طبيعة هذا التطبيق بالذات تجعل من المهم أن أقوم بتزييف الزر الفعلي ، مثل IBAction
يتم استدعاؤها من الزر ، نفسه.)
ما هي الطريقة المفضلة للقيام بذلك؟
المحلول
لقد أتضح أن
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
حصلت لي بالضبط ما أحتاجه ، في هذه الحالة.
تعديل: لا تنس القيام بذلك في الخيط الرئيسي ، للحصول على نتائج مماثلة لضغط المستخدم.
لسرعة 3:
buttonObj.sendActions(for: .touchUpInside)
نصائح أخرى
تحديث لهذه الإجابة لسويفت
buttonObj.sendActionsForControlEvents(.TouchUpInside)
تعديل: تم تحديثه لـ Swift 3
buttonObj.sendActions(for: .touchUpInside)
إذا كنت ترغب في إجراء هذا النوع من الاختبارات ، فستحب دعم أتمتة واجهة المستخدم في iOS 4. يمكنك كتابة JavaScript لمحاكاة مكابس الزر ، وما إلى ذلك. متناثر.
في هذه الحالة، UIButton
مشتق من UIControl
. هذا يعمل للكائن المشتق من UIControl
.
أردت إعادة الاستخدام "UIBarButtonItem
"العمل على حالة الاستخدام المحددة. هنا ، UIBarButtonItem
لا تقدم طريقة sendActionsForControlEvents:
لكن لحسن الحظ، UIBarButtonItem
لديه خصائص للهدف والعمل.
if(notHappy){
SEL exit = self.navigationItem.rightBarButtonItem.action;
id world = self.navigationItem.rightBarButtonItem.target;
[world performSelector:exit];
}
هنا، rightBarButtonItem
من النوع UIBarButtonItem
.
سريع 3:
self.btn.sendActions(for: .touchUpInside)
سويفت 4:
الذات.