如何在 iOS UI 测试中查询 "Main Window"?
How to query "Main Window" in iOS UI tests?
在我的测试中,有一次我需要与 Main Window
中的视图进行交互。当我执行 po app.windows
时,我得到这个:
Find: Target Application 0x1c40d7680
Output: {
Application, 0x1c4389170, pid: 4765, {{0.0, 0.0}, {375.0, 667.0}}, label: 'Mercedes PRO [testb2b]'
}
↪︎Find: Descendants matching type Window
Output: {
Window, 0x1c43890a0, {{0.0, 0.0}, {375.0, 667.0}}
Window, 0x1c438dc30, {{0.0, 0.0}, {375.0, 667.0}}
Window, 0x1c438dea0, {{0.0, 0.0}, {375.0, 667.0}}
Window, 0x1c438e6c0, Main Window, {{0.0, 0.5}, {375.0, 667.0}}
}
我需要查询 Main Window
因为我在这个列表的第一个 Window 中有几乎相同的视图,所以我想把它们分开。所以,我尝试用 app.windows["Main Window"]
查询它,但似乎 Main Window
不是 window 视图的标识符。
打印所有 XCUIElementAttributes(如 title
、value
、identifier
等)并没有给我太多信息(它们主要是空字符串)。另外,我不想按位置查询它(像这样:app.windows.element(boundBy: 3)
),因为我不确定这个 Window 是否总是在这个位置。
还有其他查询方式吗Main Window
?
我发现的最佳方法是使用帧大小过滤 windows。
let window = app.windows.allElementsBoundByIndex.first { element in
element.frame.width > 10
}!
如果我找到更好的方法,我会编辑它。
我试图实现的是为 window 对象添加一个标识符。我尝试将它添加到显示视图的 ViewController 中,我试图使用这行代码(在 viewDidLoad()
中)查询:
UIApplication.shared.delegate?.window??.accessibilityIdentifier = "Main Window"
而且我一直在错误的地方获取标识符:
Find: Target Application 0x60c0000c1260
Output: {
Application, 0x60c00018c640, pid: 33496, {{0.0, 0.0}, {414.0, 736.0}}, label: '[testb2b]'
}
↪︎Find: Descendants matching type Window
Output: {
Window, 0x60c00018c710, {{0.0, 0.0}, {414.0, 736.0}}, identifier: 'Main Window'
Window, 0x60c000191370, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c0001915e0, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c000191c60, Main Window, {{0.0, 0.5}, {414.0, 736.0}}
}
然后我在代码中找到了一个地方,开发人员在其中创建了一个新的 window,他们曾经用来保存那个 VC。
let actionVC = UIStoryboard.findViewController(withIdentifier: "ActionViewController")
if let appWindow = UIApplication.shared.delegate?.window {
let window = UIWindow.init(frame: appWindow.frame)
window.rootViewController = actionVC
window.accessibilityIdentifier = "Main Window"
}
这让我可以编写这样的查询:app.windows["Main Window"]
并确保我的目标是真实的 Main Window
。
Find: Target Application 0x60c0000c1260
Output: {
Application, 0x60c00018c640, pid: 33496, {{0.0, 0.0}, {414.0, 736.0}}, label: '[testb2b]'
}
↪︎Find: Descendants matching type Window
Output: {
Window, 0x60c00018c710, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c000191370, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c0001915e0, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c000191c60, Main Window, {{0.0, 0.5}, {414.0, 736.0}}, identifier: 'Main Window'
}
在我的测试中,有一次我需要与 Main Window
中的视图进行交互。当我执行 po app.windows
时,我得到这个:
Find: Target Application 0x1c40d7680
Output: {
Application, 0x1c4389170, pid: 4765, {{0.0, 0.0}, {375.0, 667.0}}, label: 'Mercedes PRO [testb2b]'
}
↪︎Find: Descendants matching type Window
Output: {
Window, 0x1c43890a0, {{0.0, 0.0}, {375.0, 667.0}}
Window, 0x1c438dc30, {{0.0, 0.0}, {375.0, 667.0}}
Window, 0x1c438dea0, {{0.0, 0.0}, {375.0, 667.0}}
Window, 0x1c438e6c0, Main Window, {{0.0, 0.5}, {375.0, 667.0}}
}
我需要查询 Main Window
因为我在这个列表的第一个 Window 中有几乎相同的视图,所以我想把它们分开。所以,我尝试用 app.windows["Main Window"]
查询它,但似乎 Main Window
不是 window 视图的标识符。
打印所有 XCUIElementAttributes(如 title
、value
、identifier
等)并没有给我太多信息(它们主要是空字符串)。另外,我不想按位置查询它(像这样:app.windows.element(boundBy: 3)
),因为我不确定这个 Window 是否总是在这个位置。
还有其他查询方式吗Main Window
?
我发现的最佳方法是使用帧大小过滤 windows。
let window = app.windows.allElementsBoundByIndex.first { element in
element.frame.width > 10
}!
如果我找到更好的方法,我会编辑它。
我试图实现的是为 window 对象添加一个标识符。我尝试将它添加到显示视图的 ViewController 中,我试图使用这行代码(在 viewDidLoad()
中)查询:
UIApplication.shared.delegate?.window??.accessibilityIdentifier = "Main Window"
而且我一直在错误的地方获取标识符:
Find: Target Application 0x60c0000c1260
Output: {
Application, 0x60c00018c640, pid: 33496, {{0.0, 0.0}, {414.0, 736.0}}, label: '[testb2b]'
}
↪︎Find: Descendants matching type Window
Output: {
Window, 0x60c00018c710, {{0.0, 0.0}, {414.0, 736.0}}, identifier: 'Main Window'
Window, 0x60c000191370, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c0001915e0, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c000191c60, Main Window, {{0.0, 0.5}, {414.0, 736.0}}
}
然后我在代码中找到了一个地方,开发人员在其中创建了一个新的 window,他们曾经用来保存那个 VC。
let actionVC = UIStoryboard.findViewController(withIdentifier: "ActionViewController")
if let appWindow = UIApplication.shared.delegate?.window {
let window = UIWindow.init(frame: appWindow.frame)
window.rootViewController = actionVC
window.accessibilityIdentifier = "Main Window"
}
这让我可以编写这样的查询:app.windows["Main Window"]
并确保我的目标是真实的 Main Window
。
Find: Target Application 0x60c0000c1260
Output: {
Application, 0x60c00018c640, pid: 33496, {{0.0, 0.0}, {414.0, 736.0}}, label: '[testb2b]'
}
↪︎Find: Descendants matching type Window
Output: {
Window, 0x60c00018c710, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c000191370, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c0001915e0, {{0.0, 0.0}, {414.0, 736.0}}
Window, 0x60c000191c60, Main Window, {{0.0, 0.5}, {414.0, 736.0}}, identifier: 'Main Window'
}