Если вы установили идентификатор доступности в раскадровке или в коде для текстового представления, вы можете получить текстовое представление через (при условии, что вы дали ему идентификатор «textview1» и окно, в котором он находится, имеет идентификатор доступности по умолчанию «Window»). ):
let textview1TextView = app.windows["Window"].textViews["textview1"]
но на самом деле это не даст вам того, что вам нужно.
Вместо этого установите идентификатор доступности скроллвью и получите:
let scrollview = app.windows["Window"].scrollViews["scrollview1"]
Затем используйте его, чтобы получить полосы прокрутки (в этом случае у вас должна быть только одна; вы можете использовать scrollbars.count
для проверки.
let scrollbars = scrollview.scrollBars
print("scrollbars count: \(scrollbars.count)")
Затем вы можете использовать атрибут значения полосы прокрутки, чтобы получить его значение:
(вы конвертируете XCUIElemenTypeQueryProvider в XCUIElement, чтобы вы могли получить его значение):
let val = scrollbars.element.value
это будет 0 сверху и значение с плавающей запятой при прокрутке (одна строка текста в моем тестовом коде показала значение {{0.02409638554216868}}.
Документация, которая поможет вам в дальнейшем изучении:
XCUIElementTypeQueryProvider
XCUIElementAttributes
Обратите внимание, что вы можете поставить точку останова в середине теста, запустить ее и затем использовать консоль отладчика для проверки:
(lldb) po scrollbars.element.value
t = 749.66s Find the ScrollBar ▿ Optional<Any>
- some : 0
(lldb) po scrollbars.element.value
t = 758.17s Find the ScrollBar ▿ Optional<Any>
- some : 0.05421686746987952
и, находясь в отладчике, вы даже можете взаимодействовать с окном своего приложения, чтобы прокручивать его вручную (что я и делал между вводом этих двух вызовов po
), или, возможно, добавлять текст и т. Д.
OK OP теперь отметил, что их интересует конкретный текст, показывающий или нет, а не первую видимую строку или нет (на что я ранее ответил выше).
Вот немного хака, но я думаю, что это сработает:
Используйте XCUICoordinate
метод click(forDuration:, thenDragTo:)
, чтобы выбрать первую строку текста (используйте рамку вида для вычисления координат), а затем используйте typeKey( modifierFlags:)
, чтобы вызвать команду редактирования "копировать" в меню редактирования. Затем используйте методы NSPasteboard
, чтобы получить содержимое картона и проверить текст.
Вот быстрый тест, который я сделал для проверки подхода (выделение первой строки текста с помощью XCUICoordinate
, как отмечено выше, оставлено в качестве упражнения для читателя):
NSPasteboard.general.clearContents()
// stopped at break point on next line and I manually selected the text of the first line of text in my test app and then hit continue in the debugger
textview1TextView.typeKey("c", modifierFlags:.command)
print( NSPasteboard.general.pasteboardItems?.first?.string(forType: NSPasteboard.PasteboardType.string) ?? "none" );
-> «текст первой строки» был напечатан на консоли.
Обратите внимание, что вы можете прокручивать выборку за пределами экрана, чтобы вам не приходилось прокручивать после выполнения выбора, иначе вы не получите нужный ответ.