Selenium Webdriver: Как проверить, существует ли элемент пользовательского интерфейса на указанном экране c независимо от того, виден ли он в данный момент - PullRequest
1 голос
/ 06 января 2020

Я использую пакеты AppiumDriver и MobileElement java (я пишу Kotlin) для тестирования пользовательского интерфейса приложения iOS, в котором уже есть тесты, написанные с использованием XCUITest.

Мне нужен функция, которая ведет себя так же, как XCUIElement.exists (), действует в XCUITest. Это была бы функция, которая возвращает true, если рассматриваемый UIElement присутствует на экране независимо от того, является ли он видимым / активируемым . Примером этого является элемент пользовательского интерфейса, встроенный в представление прокрутки, которое находится вне поля зрения (не прокручивается до). Он находится на странице, но он не виден и не является хитблатом.

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

Я могу подтвердить, что MobileElement .->

isDisplayed() (это ведет себя больше как isHittable (), чем существует () из того, что я видел)

isEnabled()

isSelected()

Все не делают то, что я хочу, и ничего не делает в соответствии с:

driver.findElements(By.xpath("value")).size() != 0

Вышеприведенная строка, кажется, возвращает true в тех же самых случаях, что и isDisplayed, если я не ошибаюсь.

РЕДАКТИРОВАТЬ: Некоторые пользователи предположили, что элементы могут не существует еще из-за отложенной загрузки, и именно поэтому строка driver.findElements(By.xpath("value")).size() != 0 не работает. В ответ на это я добавил изображение div, представляющего представление прокрутки в приложении iOS. Выделенный элемент пользовательского интерфейса по-прежнему не может быть найден, пока пользователь не прокрутит его вручную, чтобы сделать его видимым до истечения времени ожидания запроса.

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Чтобы проверить существование , то есть наличие элемента независимо от того, является ли элемент видимым / хитбайт , вам нужно вызвать WebDriverWait для presenceOfElementLocated(), и вы можете использовать следующую Стратегию локатора :

new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("value"))).size() != 0
0 голосов
/ 06 января 2020
driver.findElements(By.xpath("value")).size() != 0

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

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