我试图通过点击搜索栏中的"取消"按钮来关闭搜索字段.
测试用例未能找到取消按钮.它在Xcode 7.0.1中运行良好
我添加了谓词等待按钮出现.当我们点击"取消"按钮时,测试用例失败
let button = app.buttons[“Cancel”]
let existsPredicate = NSPredicate(format: "exists == 1")
expectationForPredicate(existsPredicate, evaluatedWithObject: button, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
button.tap() // Failing here
Run Code Online (Sandbox Code Playgroud)
日志:
t = 7.21s Tap SearchField
t = 7.21s Wait for app to idle
t = 7.29s Find the SearchField
t = 7.29s Snapshot accessibility hierarchy for com.test.mail
t = 7.49s Find: Descendants matching type SearchField
t = 7.49s Find: Element at index 0
t = 7.49s Wait for app to idle …Run Code Online (Sandbox Code Playgroud) 我有测试登录功能的UI测试(并用它来测试其他东西),但有时当焦点从一个字段更改为另一个字段时 - 键盘隐藏,虽然光标在字段中闪烁,但我收到错误field.typeText- no focused fields to fill.
不知怎的,我意识到,点击一个Hardware -> Keyboard -> toggle software keyboard让键盘在屏幕上保持不变,所以测试效果很好.但是我需要让它在任何开发人员机器上的任何测试设备上工作,所以我想以编程方式设置这个选项,而不要讨厌"如果测试失败,请在项目的自述文件中设置...并手动设置...".
可能吗?
当我在启用并行执行的情况下运行UI测试时,会创建一个现有模拟器的多个副本(例如iPad Air 2)来运行不同的测试套件。
在这个stackoverflow答案的运行脚本中,我注入了一个plist项“ ConnectHardwareKeyboard”,其值为false,以禁用在启动模拟器时默认启用的硬件键盘连接: 硬件->键盘->连接硬件键盘
该脚本将为现有的模拟器(iPad Air 2)正确设置值,但是当并行执行测试时,将创建iPad Air 2的多个副本,并且副本的复制者不是原始设备的副本。克隆的设备列表中没有设置任何标志,但是硬件->键盘->连接硬件键盘显示为选中状态。
这导致我的UI测试失败,因为在将test输入到textField中后尝试关闭键盘时,键盘丢失了。
我浏览了stackoverflow和Apple开发人员论坛上的许多帖子,以尝试解决此问题,但没有发现任何东西。对于其他人来说这肯定是个问题...外面有没有人遇到过同样的问题和/或找到了解决方案?
我正在使用UIAutomation在iOS模拟器中进行一些自动化测试.
在Xcode 6中,iOS模拟器的键盘行为更改为类似于真实设备,现在有一个菜单项可以将Mac键盘连接/断开连接到模拟器:硬件>键盘>连接硬件键盘.
我不介意这一点,但连接Mac键盘时会发生的情况是模拟器将不再显示软件键盘.当您使用UIAutomation运行测试脚本UIATarget.localTarget().frontMostApp().keyboard().typeString("myString");时,即使您已将文本字段设置为第一个响应者,因此类似的调用也会失败,因为键盘不会出现.
这很烦人,因为如果我在模拟器中进行任何手动测试,我将需要记住在运行任何UIAutomation测试之前禁用硬件键盘,否则它们都会失败.
从UIAutomation JS脚本中有没有办法检查硬件键盘设置并禁用它们?或者,在执行UIAutomation脚本之前,从命令行执行此操作的任何方法?
我正在编写依赖于显示软件键盘的 UITests。由于 CI 每次都会在全新的模拟器上启动测试,该模拟器已连接硬件键盘,因此不会提供软件键盘。
是否可以设置一些设置(可能在架构中?)以强制禁用模拟器连接硬件键盘。
我正在使用 Cucumber/appium 运行测试。
我开始在编写 UI 测试的同时尝试使用 Swift,但在向文本字段中输入文本时遇到了问题。下面是代码:
func testLoginUsernameField() {
let app = XCUIApplication()
app.launch()
let username = "testusername2"
let usernameField = app.textFields["username_field"]
XCTAssertTrue(usernameField.exists)
usernameField.tap()
usernameField.typeText(username)
XCTAssertEqual(usernameField.value as! String, username)
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时就会出现问题usernameField.typeText(username)。我的文字继续写,tstusername2而不是testusername2.