我正在编写一些单元测试,并且由于这个特定应用程序的性质,我必须尽可能地高出UI
链。所以,我想要做的是以编程方式触发按钮按下,就像用户按下GUI
中的按钮一样。
(是的,是的 - 我可以只是调用IBAction
选择器,但是,这个特定应用程序的性质使得重要的是我假装实际的按钮按下,这样从按钮本身调用IBAction
。)
这样做的首选方法是什么?
答案 0 :(得分:445)
事实证明
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
在这种情况下,正好得到了我所需要的。
编辑:不要忘记在主线程中执行此操作,以获得类似于用户按下的结果。
对于Swift 3:
buttonObj.sendActions(for: .touchUpInside)
答案 1 :(得分:49)
Swift的答案更新
buttonObj.sendActionsForControlEvents(.TouchUpInside)
编辑:已针对Swift 3进行了更新
buttonObj.sendActions(for: .touchUpInside)
答案 2 :(得分:6)
如果你想进行这种测试,你会喜欢iOS 4中的UI自动化支持。你可以很容易地编写JavaScript来模拟按键等,尽管文档(尤其是入门部分)有点稀疏。
答案 3 :(得分:5)
在这种情况下,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
。
答案 4 :(得分:3)
答案 5 :(得分:3)
斯威夫特3:
self.btn.sendActions(for: .touchUpInside)
答案 6 :(得分:1)
这对于编写没有UI测试的单元测试的人很方便;-)
快速解决5种方法来解决UIBarButtonItem
的问题,sendAction
没有UIButton等的extension UIBarButtonItem {
func sendAction() {
guard let myTarget = target else { return }
guard let myAction = action else { return }
let control: UIControl = UIControl()
control.sendAction(myAction, to: myTarget, for: nil)
}
}
方法。
let action = UIBarButtonItem(title: "title", style: .done, target: self, action: #selector(doSomething))
action.sendAction()
现在您可以简单地:
const array = [
{ foo: NaN, test: 'String' },
{ foo: 2, test: '' },
{ foo: 3, test: 'Something' },
]
array.filter(item => Object.values(item).reduce((acc, value) => acc && value), true)
答案 7 :(得分:1)
斯威夫特 5:
class ViewController: UIViewController {
@IBOutlet weak var theTextfield: UITextField!
@IBOutlet weak var someButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
theTextfield.text = "Pwd"
someButton.sendActions(for: .touchUpInside)
}
@IBAction func someButtonTap(_ sender: UIButton) {
print("button tapped")
}
}
答案 8 :(得分:0)
迅速4:
self .yourButton(self)