在Swift 4

时间:2018-08-22 21:13:12

标签: swift xctest xcuitest xctestcase

我正在XCUITest中编写测试。在我进行测试时,移动屏幕上可能会或可能不会出现介绍性横幅。我想以这样的方式编写案例:如果出现横幅,则必须验证该横幅上的某些元素,然后单击其上的“继续”按钮;如果不存在,则必须继续我的测试用例。

我知道在Java中,我们在try-catch块中编写了这样的代码,因此,即使未找到标语并且代码失败,指针也会进入catch块,其余程序继续。

当我在互联网上搜索时,我只发现了单个语句而不是某些代码块的功能.Swift中是否有类似的功能,我可以在try-catch中编写一些代码(例如代码块)? 请查看我的测试用例和单击横幅中的代码。

class MyTestClass: BaseTest {
    func testMapSearch() {
        do {
            let app = try XCUIApplication()
            let element = try app.children(matching: .window).element(boundBy: 0).children(matching: .other).element.children(matching: .other).element(boundBy: 1).children(matching: .other).element(boundBy: 0)
            element.buttons["Continue"].tap()
        } catch let error {
            print("Error: \(error)")
        }

        let logInButton = app.scrollViews.otherElements.buttons["Log In"]

        checkLoginPage(login: logInButton)
        logInButton.tap()
    }
}

编写do块以单击横幅上的“继续”按钮,该横幅不能确定显示在屏幕上。 do块之后是更多代码。如果未显示横幅,则在do块中编写的代码将失败,并且测试用例将引发错误。我想写一个案例,使无论是否显示横幅,都应执行登录按钮代码。

1 个答案:

答案 0 :(得分:1)

您的代码存在问题,因为标记为try的两行代码均无法失败(它们并非throw),因此您不能首先标记它们try

将这种情况转换为try / catch的整个尝试都是错误的。您要做的只是在 check 中添加一个条件,确定所需的元素existsis tappable,如果没有则进行不同的处理(即不要尝试点击)。这就是if的目的。

(当然,有人可能会争辩说,如果不可能tap来完成该测试不是要失败,那么该测试 itself 的构造是不正确的-您应该省略tap行。)