有没有办法在Xcode 7中通过UI测试在应用程序中运行代码?这可以通过应用程序测试(因为测试在应用程序中运行),但对于UI测试来说似乎并不是一种简单的方法。
有没有人找到解决方法?
答案 0 :(得分:2)
在您正在通过UI测试执行应用的应用中运行代码的最直接方式是提供launchArguments via XCUIApplication。
ui测试代码
import XCTest
class UITestUITests: XCTestCase {
override func setUp() {
super.setUp()
let app = XCUIApplication()
app.launchArguments += ["-anargument", "false","-anotherargument","true"]
app.launch()
}
}
应用代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
print("All arguments: \(NSProcessInfo.processInfo().arguments)\n\n")
print("anargument: \(NSUserDefaults.standardUserDefaults().boolForKey("anargument"))")
print("anotherargument: \(NSUserDefaults.standardUserDefaults().boolForKey("anotherargument"))")
return true
}
从ui测试启动时app输出:
All arguments: ["/...../AnApp.app/UITest", "-anargument", "false", "-anotherargument", "true"]
anargument: false
anotherargument: true
答案 1 :(得分:1)
UI测试在与您的应用分开的流程中运行。目前,从Xcode 7.1.1开始,无法直接与框架中的生产应用程序代码进行交互。
每次互动都必须通过可访问性进行路由。这意味着您可以连接一个在您的应用中执行代码的按钮,然后让测试调用该按钮。这显然是不可扩展的,我建议反对它。
也许有另一种方法来实现你的目标?你到底想要完成什么?
答案 2 :(得分:0)
我正考虑在测试时将环境变量传递给应用程序,以启动嵌入式HTTP服务器。然后我可以通过服务器与应用程序通信。疯了吧?然而,我无法相信没有人这样做过。
我最关心的是这种方法是嵌入式服务器将在生产应用程序中。我不确定这是否是一个问题,或者是否只是在运行UI测试时只包含它的简单方法。