Как проверить, содержит ли UIImageView изображение с определенным именем, используя XCUITest? - PullRequest
1 голос
/ 12 июня 2019

У меня есть collectionView, в котором есть куча ячеек, содержащих один UIImageView в каждой ячейке.Я хочу проверить, не в каждой ли ячейке или нет, изображение imageView соответствует правильному имени изображения.

В рабочем коде я добавил идентификатор доступности в пример UIImageView: «My Image View».Я перебираю массив строк, содержащих имена изображений, и устанавливаю изображение ячейки в соответствии с индексом, например: ["image0.png", "image1.png", "image2.png"], поэтому ячейки с индексом 0-2 будутесть эти изображения соответственно.

В моем файле XCUITest я пытаюсь что-то вроде этого:

XCTAssert(cells.images["My Image View"].exists, "message here")

Но это не проверяет, есть ли у imageView ячейки правильное изображение.Кто-нибудь может предложить лучшее решение?

Некоторые ссылки, которые я посетил заранее:

Как проверить элементы UIImageView в iOS XCTest?

XCUIElement - Получить значение изображения

Я извиняюсь, если этот вопрос задавался ранее, я ничего не смог найти.

Редактировать: Я нашел решение.

let image = cells.element(matching: , identifier: )

Я не зналчто параметр идентификатора на самом деле использует имя изображения, поэтому, если я передам имя изображения, я могу утверждать о существовании изображения.

let image = cells.element(matching: .image, identifier: "myImage.png")

это работает.Поэтому, когда я перебираю массив строк, содержащих имя изображения, я также могу проверить, правильна ли ячейка с индексом, соответствующим индексу изображения.

Я также забыл упомянуть, что изображения не сохраняются в ресурсах, а извлекаются с помощью json.

Ответ cesarmarch ниже был самым близким, поэтому я отметил это как правильный.

Ответы [ 3 ]

2 голосов
/ 14 июня 2019

Я просто использую что-то вроде

XCTAssert(cells.images["Image_Name_In_Resource_Directory"].exists, "message here")

, чтобы проверить, подходит ли текущее изображение и работает ли оно нормально.

2 голосов
/ 13 июня 2019

Тесты пользовательского интерфейса XCTest предназначены для написания в виде функциональных тестов, а не для проверки правильности отображения.Поскольку изображение не демонстрирует поведение, которое должен соблюдать тест пользовательского интерфейса, тест пользовательского интерфейса - не лучший инструмент для работы.

В этом случае вам следует написать модульные тесты, чтобы утверждать, что правильное изображениеприсваивается вашим представлениям изображений, так как модульные тесты будут иметь доступ к нужному уровню информации, чтобы вы могли проверять данные, которые вы передаете в слой представления представления и актив, что назначенное изображение является тем, которое вы ожидаете.

0 голосов
/ 14 июня 2019

Все изображения в проекте экспортируются в комплект приложения при сборке. В вашей группе UI Testing есть папка, содержащая все ожидаемые изображения для проверки и фиктивный файл изображения.

var url = Bundle(for: AnyClass.self).url(forResource: "<ExpectedImageName>", withExtension: "<imageExtension png/jpg/etc>")!
let expectedImage = NSImage(contentsOf: url)!.tiffRepresentation!
url = Bundle(for: AnyClass.self).url(forResource: "<NameOfDummyImageFile>", withExtension: "png")!
try? cells.images["My Image View"].screenshot().pngRepresentation.write(to: url)
let actualImage = NSImage(contentsOf: url)!.tiffRepresentation!
XCTAssert(actualImage.elementsEqual(expectedImage), "Images are not same.")

Приведенный выше код работает для меня .. Надеюсь, это будет работать и для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...