В IOS элемент «виден» и нажимается, даже если он не отображается

#ios #selenium #browserstack #remotewebdriver

Вопрос:

У меня возникла проблема при запуске теста selenium в BrowserStack. Этот тест должен провалиться. Это действительно не работает на Android, но проходит на iOS, и я просто не понимаю, как это происходит.

К сожалению, мне не разрешено делиться html-кодом, но я могу поделиться своим кодом. Я называю этот метод:

 public void clickElement() {
        driver.findElement(Element1).click();
    }
 

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

Но на iOS (все устройства, которые я мог найти в браузере, как мобильные, так и планшетные), эта кнопка, пока скрытая, все равно нажимается.

Я не понимаю, как это возможно. Кто-нибудь знает, откуда взялась эта проблема? Связано ли это с iOS или браузером? Или и то и другое?

Любая помощь была бы очень признательна, спасибо

Ответ №1:

Здесь может быть 2 причины:

  1. Непрозрачность установлена на 0 — В этом случае элемент может быть нам не виден, но он все еще не скрыт. Только в том случае, если элементы скрыты, они перестанут получать события UITouch.
  2. За представлениями могут быть представления — поэтому, если вы спрятали первое, а другие представления находятся за этим первым, они все равно будут продолжать реагировать на события UITouch.

Поэтому, чтобы убедиться в том, что происходит в вашем случае, вы должны убедиться, что waitForVisibilityOf этот метод действительно скрывает представления и для iOS.

Комментарии:

1. Привет, Маниш, я на самом деле упростил свой код выше. Этот код не работает на Android (и он должен). Но в iOS нажимается «Элемент1». Непрозрачности нет, «Элемент1» на самом деле является частью боковой панели, которая изначально скрыта. Чтобы отобразить его (и, следовательно, «Элемент1» тоже), вам сначала нужно нажать на другую кнопку.