如何等待一个元素并且在一定时间后没有找到时不会失败 xcuitest
How to Wait for an element and do not fail if not found after a certain time xcuitest
在我的应用程序中,我有两个选项卡按钮,分别是“任务”和“工作列表”。总是加载任务。但是 Worklist 按钮是动态的,只有在一段时间后才会加载。
我想在特定时间后单击“任务”按钮。即,我需要等待 Worklist 按钮,如果它在一定时间后存在,则单击 Tasks 按钮。此外,如果超时超过并且未加载工作列表按钮,那么我需要单击任务按钮。
我无法使用睡眠。
我可以使用 expectationForPredicate 和 waitForExpectationsWithTimeout 吗?但是,如果在超时后未找到该元素,waitForExpectationsWithTimeout 将失败。即使我写
waitForExpectationsWithTimeout(120) { (error) -> Void in
click Tasks button
}
这导致主线程停顿。
我只想在加载工作列表后单击“任务”按钮。但是如果超时后工作列表没有加载,那么我还需要点击任务按钮..
有什么解决办法吗。任何帮助。
您可以创建自己的自定义方法来处理此问题:
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()
}
希望这对你有用!
在我的应用程序中,我有两个选项卡按钮,分别是“任务”和“工作列表”。总是加载任务。但是 Worklist 按钮是动态的,只有在一段时间后才会加载。
我想在特定时间后单击“任务”按钮。即,我需要等待 Worklist 按钮,如果它在一定时间后存在,则单击 Tasks 按钮。此外,如果超时超过并且未加载工作列表按钮,那么我需要单击任务按钮。
我无法使用睡眠。
我可以使用 expectationForPredicate 和 waitForExpectationsWithTimeout 吗?但是,如果在超时后未找到该元素,waitForExpectationsWithTimeout 将失败。即使我写
waitForExpectationsWithTimeout(120) { (error) -> Void in
click Tasks button
}
这导致主线程停顿。
我只想在加载工作列表后单击“任务”按钮。但是如果超时后工作列表没有加载,那么我还需要点击任务按钮..
有什么解决办法吗。任何帮助。
您可以创建自己的自定义方法来处理此问题:
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()
}
希望这对你有用!