J'ai créé un petit projet que le chargement google.com dans un SFSafariViewController sur le lancement. Quand je lance des tests de l'interface utilisateur contre cette application et imprime la description de débogage de la fenêtre, je reçois le texte suivant:
(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}}
}
Vous pouvez voir que l'élément qui contient la valeur google.com
est considérée comme un bouton que le cadre d'accessibilité. Il semble faux, mais c'est comme ça et il n'y a rien que vous puissiez faire à ce sujet. La façon d'accéder à la valeur de cet élément serait le
XCUIApplication().buttons['URL'].value!
suivant Le seul problème est que c'est renvoie les éléments suivants
gen.xyz, secure and validated connection
Donc la dernière chose à faire est d'analyser cela et vous aurez la adresse
let value = XCUIApplication().buttons["URL"].value as! String
let address = value.components(separatedBy: ",").first!
C'est certainement hacky bien et pourrait changer à l'avenir si Apple décide d'appliquer leurs propres conseils à leurs propres produits en matière d'accessibilité.
Merci pour la réponse détaillée !! Très utile. – rfodge
Quand la valeur revient, elle a \ u (e2) au début, savez-vous pourquoi? – rfodge
Hmm non, quelle URL essayez-vous de charger? –