Xcode 7†有一种直接测试UI的新方法,包括新的测试目标"iOS UI Testing Bundle"(或"OS X").

在UI测试目标中,似乎没有对构成您的App的模型或类的内置访问.例如[UIApplication sharedApplication],您的UI测试无法调用.这意味着"应用程序测试"和"UI测试"存在于可能不可逾越的鸿沟中.
如前所述这里:
问题是Xcode的UI测试不允许访问实际的应用程序.
问题:
xcodeproj在github上工作.†在撰写本文时,测试版软件.
有没有办法自动化SFSafariViewController?我喜欢Xcode 7 UI测试功能,但它似乎不支持SFSafariViewController自动化.我正在测试的一些UI流程需要一个Web浏览器,因此应用程序使用SFSafariViewController使其比Web视图更安全.
我正在使用集成在Xcode和XCTest中的UI Test Case类来测试应用程序UI.我想测试这样的东西:
app = XCUIApplication()
let textField = app.textFields["Apple"]
textField.typeText("text_user_typed_in")
XCTAssertEqual(textField.text, "text_user_typed_in")
Run Code Online (Sandbox Code Playgroud)
我已经尝试过textField.value了!字符串方法; 这是行不通的.我也尝试过使用新的异步方法和expectationForPredicate(),它会导致超时.
知道怎么做吗?或者UI测试无法验证这种类型,我只能编写黑盒测试?
我使用的是新Xcode UI Testing的XCTest Framework与Xcode 7 GM.我有一个简单的UIWebView应用程序(它只是一个导航控制器+带有Web视图和按钮的视图控制器),我想检查以下场景:
www.example.com www.example2.com我想在按下按钮后检查UIWebView中加载了哪个页面.这是否可以通过UI测试立即实现?
其实我得到这样的网页视图:
let app:XCUIApplication = XCUIApplication()
let webViewQury:XCUIElementQuery = app.descendantsMatchingType(.WebView)
let webView = webViewQury.elementAtIndex(0)
Run Code Online (Sandbox Code Playgroud) 有没有办法在Swift 2.0中编写自动UI测试时模拟请求.据我所知,UI测试应该独立于其他功能.有没有办法模拟服务器请求的响应,以便测试依赖于响应的UI行为.例如,如果服务器已关闭,则UI测试仍应运行.快速示例,对于登录,如果密码失败则模拟,然后UI应显示警报,但是,如果登录成功,则应显示下一页.
我已经开始使用Xcode 7的UI测试功能,当我运行测试时,我会在调试区域的内容窗格中显示测试结果.
但是,一旦测试完成,该输出就会被来自应用程序本身的日志记录所取代.
有没有办法保持两组记录数据可见?
添加一个我想看的例子:
以下UI测试代码将成功点击UISearchBar元素.出现软件键盘,搜索栏看起来像是焦点.(即,它会像有人敲击它一样动画)
let searchBar = XCUIApplication().otherElements["accessibility_label"]
searchBar.tap()
searchBar.typeText("search text")
Run Code Online (Sandbox Code Playgroud)
但是,typeText失败:
UI测试失败 - 元素和任何后代都没有键盘焦点.元件:
注意:硬件 - >键盘 - >连接硬件键盘关闭.这解决了文本字段的相同问题,但搜索栏仍然失败.
我有一个UI测试,它检查静态文本元素的值,等待几秒钟,然后再次检查以确认更改.起初它没有工作,因为层次结构没有更新.我在日志中注意到了这一点;
使用缓存的辅助功能层次结构
我通过简单地添加一个菜单并打开/关闭它以便合成事件并更新层次结构来为此设置解决方法.
但是,如果有一种方法可以直接清除缓存或强制更新,那就更好了.我还没有在API中找到一个.我错过了什么吗?
有任何想法吗?
这就是我在做的事情;
XCTAssertEqual(app.staticTexts["myText"].label, "Expected 1")
sleep(20)
menu.tap()
sleep(1)
menu.tap()
XCTAssertEqual(app.staticTexts["myText"].label, "Expected 2")
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这一点
XCTAssertEqual(app.staticTexts["myText"].label, "Expected 1")
sleep(20)
app.elements.refresh()
XCTAssertEqual(app.staticTexts["myText"].label, "Expected 2")
Run Code Online (Sandbox Code Playgroud) private func acceptPermissionAlert() {
_ = addUIInterruptionMonitor(withDescription: "") { alert -> Bool in
if alert.buttons["Don’t Allow"].exists { //doesnt get here second time
alert.buttons.element(boundBy: 1).tapWhenExists()
return true
}
return false
}
}
Run Code Online (Sandbox Code Playgroud)
这不适用于:
在应用程序的开头,它是完美的,同时acepting通知的权限,但在这里...不起作用.
你知道为什么吗?
这是我正在使用的表的图片.
我只想尝试"请求"(灰色)或"草稿"(橙色)的颜色.我能够得到"请求"或"草稿"的实际字符串
var timeSheetStatus =
app.tables.element.cells.elementBoundByIndex(0).staticTexts.elementBoundByIndex(1).label
Run Code Online (Sandbox Code Playgroud)
但这只是一个字符串,而不是UIlabel(如果它是UILabel我可以做label.textColor我相信).如何获得此字符串的颜色,以便我可以断言它确实是灰色或橙色?
xcode-ui-testing ×10
ios ×5
swift ×5
xcode7 ×4
ui-testing ×3
xctest ×3
xcode ×2
ios9 ×1
logging ×1
uiwebview ×1