XCUITest 获取 URL 值

reu*_*sey 1 ios ios-ui-automation xctest xcode-ui-testing xcode8

我正在使用 XCUITest 和 XCode 版本 8.3.3。该应用程序有一个登录按钮,可启动浏览器窗口。想知道是否有人可以告诉我如何访问打开的 URL 的值。我想验证我们在选择“登录”按钮时启动了正确的 URL。

let app = XCUIApplication()
let loginButton = app.buttons["Login"]
loginButton.tap()
Run Code Online (Sandbox Code Playgroud)

此时浏览器窗口打开:在此输入图像描述

如何获取 xyz.com 的价值?

使用辅助功能检查器,我可以看到: 在此输入图像描述

Tit*_*eul 5

我创建了一个小项目,在启动时在 SFSafariViewController 中加载 google.com。当我针对此应用程序运行 UI 测试并打印窗口的调试描述时,我得到以下信息:

\n\n
(lldb) po XCUIApplication().windows.descendants(matching: .any)\n    t =    29.26s     Use cached accessibility hierarchy for com.tito.Safari\n    t =    29.27s     Find: Descendants matching type Window\n    t =    29.27s     Find: Descendants matching type Any\nFind: Target Application 0x6000000afa20\n  Output: {\n    Application 0x6000001684c0: {{0.0, 0.0}, {375.0, 667.0}}, label: \'Safari\'\n  }\n  \xe2\x86\xaa\xef\xb8\x8eFind: Descendants matching type Window\n    Output: {\n      Window 0x600000169a80: Main Window, {{0.0, 0.0}, {375.0, 667.0}}\n      Window 0x60000016a8c0: {{0.0, 0.0}, {375.0, 667.0}}\n      Window 0x60000016fb40: {{0.0, 0.0}, {375.0, 667.0}}\n      Window 0x60000016c780: {{0.0, 0.0}, {375.0, 667.0}}\n      Window 0x600000169e40: {{-0.0, -0.0}, {375.0, 667.0}}\n    }\n    \xe2\x86\xaa\xef\xb8\x8eFind: Descendants matching type Any\n      Output: {\n        Button 0x608000169900: traits: 8589934593, {{9.5, 22.0}, {43.0, 34.0}}, label: \'Done\'\n        Other 0x608000165b80: traits: 8589935104, {{68.5, 24.5}, {295.0, 29.0}}, identifier: \'URL\', label: \'Address\', value: 10%\n        Button 0x608000169840: traits: 8589934593, {{336.5, 24.5}, {29.0, 29.0}}, identifier: \'StopButton\', label: \'stop\'\n        Button 0x600000168100: traits: 146028888065, {{66.5, 24.5}, {299.0, 29.0}}, identifier: \'URL\', label: \'Address\', value: \xe2\x80\x8egoogle.com\n        Other 0x6080001696c0: traits: 8589934592, {{0.0, 20.0}, {375.0, 44.0}}\n        WebView 0x608000167ec0: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x608000167e00: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x608000169b40: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x608000167a40: traits: 8589934592, {{0.0, 622.5}, {375.0, 0.5}}\n        Button 0x6080001675c0: traits: 8589934849, {{0.5, 625.0}, {42.0, 40.0}}, label: \'Back\'\n        Button 0x600000167bc0: traits: 8589934849, {{104.0, 625.0}, {42.0, 40.0}}, label: \'Forward\'\n        Button 0x600000167c80: traits: 8589934593, {{207.5, 624.0}, {51.0, 40.0}}, label: \'Share\'\n        Button 0x60000016fa80: traits: 8589934593, {{320.5, 625.5}, {55.0, 40.0}}, label: \'Open in Safari\'\n        Toolbar 0x608000167b00: traits: 35192962023424, {{0.0, 623.0}, {375.0, 44.0}}\n        Other 0x608000165ac0: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x608000169780: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x608000169480: \n        Other 0x608000169180: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x60000016cc00: traits: 8589934592, {{0.0, 64.0}, {24.0, 603.0}}\n        Other 0x6080001690c0: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x600000168400: {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x600000169180: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x600000169f00: \n        Other 0x60000016a680: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x600000167b00: {{0.0, 0.0}, {375.0, 20.0}}\n        Other 0x60000016fd80: traits: 8388608, {{6.0, 0.0}, {39.0, 20.0}}\n        Other 0x60000016e340: traits: 8388608, {{50.0, 0.0}, {13.0, 20.0}}, label: \'3 of 3 Wi-Fi bars\', value: SSID\n        Other 0x60000016fe40: traits: 8389120, {{161.0, 0.0}, {57.0, 20.0}}, label: \'10:33 AM\'\n        Other 0x60000016e880: traits: 8388608, {{337.0, 0.0}, {33.0, 20.0}}, label: \'-100% battery power\'\n        Other 0x60000016dc80: {{0.0, 0.0}, {375.0, 20.0}}\n        StatusBar 0x600000169240: {{0.0, 0.0}, {375.0, 20.0}}\n        Other 0x60000016a440: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}\n        Other 0x600000170140: \n        Other 0x60000016da40: traits: 8589934592, {{-0.0, -0.0}, {375.0, 667.0}}\n        Other 0x60000016c600: \n        Other 0x60000016af80: traits: 8589934592, {{-0.0, -0.0}, {375.0, 667.0}}\n      }\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以看到包含该值的元素google.com被视为辅助功能框架的按钮。

\n\n
Button 0x600000168100: traits: 146028888065, {{66.5, 24.5}, {299.0, 29.0}}, identifier: \'URL\', label: \'Address\', value:\n
Run Code Online (Sandbox Code Playgroud)\n\n

这似乎是错误的,但事实就是如此,你对此无能为力。访问该元素的值的方法如下

\n\n
XCUIApplication().buttons[\'URL\'].value!\n
Run Code Online (Sandbox Code Playgroud)\n\n

唯一的问题是它返回以下内容

\n\n
\xe2\x80\x8egen.xyz, secure and validated connection\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以最后要做的就是解析它,你会得到地址

\n\n
let value = XCUIApplication().buttons["URL"].value as! String\nlet address = value.components(separatedBy: ",").first!\n
Run Code Online (Sandbox Code Playgroud)\n\n

不过,这绝对是很老套的,如果苹果决定在可访问性方面将自己的建议应用到自己的产品中,那么将来可能会发生变化。

\n

  • 谢谢您的详细解答!!很有帮助。 (3认同)