我正在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
块中编写的代码将失败,并且测试用例将引发错误。我想写一个案例,使无论是否显示横幅,都应执行登录按钮代码。
答案 0 :(得分:1)
您的代码存在问题,因为标记为try
的两行代码均无法失败(它们并非throw
),因此您不能首先标记它们try
将这种情况转换为try / catch的整个尝试都是错误的。您要做的只是在 check 中添加一个条件,确定所需的元素exists和is tappable,如果没有则进行不同的处理(即不要尝试点击)。这就是if
的目的。
(当然,有人可能会争辩说,如果不可能tap
来完成该测试不是要失败,那么该测试 itself 的构造是不正确的-您应该省略tap
行。)