我使用的是XCUITest和XCode版本8.3.3。应用程序有一个启动浏览器窗口的登录按钮。想知道是否有人能告诉我如何访问打开的URL的值。我想验证我们启动正确的URL时,选择登录按钮。
let app = XCUIApplication()
let loginButton = app.buttons["Login"]
loginButton.tap()此时浏览器窗口是打开的:

如何获得xyz.com的值?
使用可访问性检查器,我可以看到:

发布于 2017-07-06 02:44:36
我创建了一个小项目,在启动时将google.com加载到SFSafariViewController中。当我对这个应用程序运行UI测试并打印窗口的调试描述时,我得到以下信息:
(lldb) po XCUIApplication().windows.descendants(matching: .any)
t = 29.26s Use cached accessibility hierarchy for com.tito.Safari
t = 29.27s Find: Descendants matching type Window
t = 29.27s Find: Descendants matching type Any
Find: Target Application 0x6000000afa20
Output: {
Application 0x6000001684c0: {{0.0, 0.0}, {375.0, 667.0}}, label: 'Safari'
}
↪︎Find: Descendants matching type Window
Output: {
Window 0x600000169a80: Main Window, {{0.0, 0.0}, {375.0, 667.0}}
Window 0x60000016a8c0: {{0.0, 0.0}, {375.0, 667.0}}
Window 0x60000016fb40: {{0.0, 0.0}, {375.0, 667.0}}
Window 0x60000016c780: {{0.0, 0.0}, {375.0, 667.0}}
Window 0x600000169e40: {{-0.0, -0.0}, {375.0, 667.0}}
}
↪︎Find: Descendants matching type Any
Output: {
Button 0x608000169900: traits: 8589934593, {{9.5, 22.0}, {43.0, 34.0}}, label: 'Done'
Other 0x608000165b80: traits: 8589935104, {{68.5, 24.5}, {295.0, 29.0}}, identifier: 'URL', label: 'Address', value: 10%
Button 0x608000169840: traits: 8589934593, {{336.5, 24.5}, {29.0, 29.0}}, identifier: 'StopButton', label: 'stop'
Button 0x600000168100: traits: 146028888065, {{66.5, 24.5}, {299.0, 29.0}}, identifier: 'URL', label: 'Address', value: google.com
Other 0x6080001696c0: traits: 8589934592, {{0.0, 20.0}, {375.0, 44.0}}
WebView 0x608000167ec0: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x608000167e00: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x608000169b40: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x608000167a40: traits: 8589934592, {{0.0, 622.5}, {375.0, 0.5}}
Button 0x6080001675c0: traits: 8589934849, {{0.5, 625.0}, {42.0, 40.0}}, label: 'Back'
Button 0x600000167bc0: traits: 8589934849, {{104.0, 625.0}, {42.0, 40.0}}, label: 'Forward'
Button 0x600000167c80: traits: 8589934593, {{207.5, 624.0}, {51.0, 40.0}}, label: 'Share'
Button 0x60000016fa80: traits: 8589934593, {{320.5, 625.5}, {55.0, 40.0}}, label: 'Open in Safari'
Toolbar 0x608000167b00: traits: 35192962023424, {{0.0, 623.0}, {375.0, 44.0}}
Other 0x608000165ac0: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x608000169780: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x608000169480:
Other 0x608000169180: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x60000016cc00: traits: 8589934592, {{0.0, 64.0}, {24.0, 603.0}}
Other 0x6080001690c0: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x600000168400: {{0.0, 0.0}, {375.0, 667.0}}
Other 0x600000169180: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x600000169f00:
Other 0x60000016a680: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x600000167b00: {{0.0, 0.0}, {375.0, 20.0}}
Other 0x60000016fd80: traits: 8388608, {{6.0, 0.0}, {39.0, 20.0}}
Other 0x60000016e340: traits: 8388608, {{50.0, 0.0}, {13.0, 20.0}}, label: '3 of 3 Wi-Fi bars', value: SSID
Other 0x60000016fe40: traits: 8389120, {{161.0, 0.0}, {57.0, 20.0}}, label: '10:33 AM'
Other 0x60000016e880: traits: 8388608, {{337.0, 0.0}, {33.0, 20.0}}, label: '-100% battery power'
Other 0x60000016dc80: {{0.0, 0.0}, {375.0, 20.0}}
StatusBar 0x600000169240: {{0.0, 0.0}, {375.0, 20.0}}
Other 0x60000016a440: traits: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}
Other 0x600000170140:
Other 0x60000016da40: traits: 8589934592, {{-0.0, -0.0}, {375.0, 667.0}}
Other 0x60000016c600:
Other 0x60000016af80: traits: 8589934592, {{-0.0, -0.0}, {375.0, 667.0}}
}您可以看到,包含值google.com的元素被看作是可访问性框架的按钮。
Button 0x600000168100: traits: 146028888065, {{66.5, 24.5}, {299.0, 29.0}}, identifier: 'URL', label: 'Address', value:这似乎是错误的,但事实就是如此,你对此无能为力。访问此元素的值的方法如下
XCUIApplication().buttons['URL'].value!唯一的问题是它返回以下内容
gen.xyz, secure and validated connection所以最后要做的就是解析这个,你会得到地址
let value = XCUIApplication().buttons["URL"].value as! String
let address = value.components(separatedBy: ",").first!不过,如果苹果公司决定在他们自己的产品上应用自己的建议,在可访问性方面,这无疑是很麻烦的,而且将来可能会发生变化。
发布于 2020-07-14 20:29:49
我找到了其他的回应,没有得到完整的URL。这两种方法只会给你域名。
通过首先点击地址栏,我就可以得到结果文本字段的值。
let safari = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari")
safari.buttons["URL"].tap()
let url = safari.textFields["URL"].value as! String那就断言吧。
发布于 2021-10-20 21:21:39
要在iOS 15上运行Xcode 13,我使用了以下代码
let safari = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari")
safari.textFields["Address"].tap()
let val = safari.textFields["Address"].value as! Stringhttps://stackoverflow.com/questions/44933947
复制相似问题