在我的应用程序中,我有一个两个标签按钮,分别说任务和工作清单。始终加载任务。但Worklist按钮是动态的,只在一段时间后加载。
我想在一段时间后点击“任务”按钮。即,我需要等待工作列表按钮,如果它在一定时间后存在,则单击任务按钮。此外,如果超时超出并且未加载Worklist按钮,则我需要单击“任务”按钮。
我无法使用睡眠。
我可以使用expectationForPredicate和waitForExpectationsWithTimeout吗?但是如果在超时后找不到该元素,则waitForExpectationsWithTimeout将失败。即使我写了
waitForExpectationsWithTimeout(120) { (error) -> Void in
click Tasks button
}
这会在主线程上产生停顿。
我只想在加载工作清单后点击“任务”按钮。但是如果在超时后没有加载worklist,那么我还需要单击Tasks按钮..
有没有解决方案。任何帮助。
答案 0 :(得分:2)
您可以创建自己的自定义方法来处理此问题:
func waitForElementToExist(
element: XCUIElement,
timeout: Int = 20,
failTestOnFailure: Bool = true)
-> Bool
{
var i = 0
let message = "Timed out while waiting for element: \(element) after \(timeout) seconds"
while !element.exists {
sleep(1)
i += 1
guard i < timeout else {
if failTestOnFailure {
XCTFail(message)
} else {
print(message)
}
return false
}
}
return true
}
您可以调用以下方法:
if waitForElementToExist(taskButton, timeout: 20, failTestOnFailure: false) {
button.tap()
}
希望这适合你!