Не удается найти Snackbar приложения Android в автоматизации Appium

У меня есть приложение ToDo для Android, которое показывает Snackbar всякий раз, когда сохраняется новое ToDo. В моем тесте автоматизации я не могу захватить Snackbar, поэтому я попытался использовать следующий xpath driver.findElementByXPath("//*[@text='TO-DO saved']").isDisplayed(), а также попробовал driver.findElementByAndroidUIAutomator("new UiSelector().text(\"TO-DO saved\")").isDisplayed(), но безуспешно.

Может ли кто-нибудь помочь мне получить элемент Android Snackbar в appium?


person Pramod Nikule    schedule 11.05.2018    source источник


Ответы (2)


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

person Hanoch Moreno    schedule 23.02.2020
comment
В отсутствие определенного решения (другой ответ - попытка ...) я приму это как частичный ответ, способствующий наблюдению и анализу. - person Yunnosch; 23.02.2020

Закусочная - это элемент, который появляется только в определенном состоянии и часто на короткий период времени.

Вы можете попробовать поймать его с помощью FluentWait:

FluentWait<WebDriver> wait = new WebDriverWait(driver, 10).ignoring(NoSuchElementException.class);
wait.until(visibilityOfElementLocated(By.xpath("//*[@text='TO-DO saved']")));

Период опроса по умолчанию составляет 500 миллисекунд, этого в большинстве случаев должно быть достаточно.

Тем не менее, подумайте, что лучше заменить локатор xpath на id, возможно, вам придется добавить resource-id для закусочной, если его нет на месте.

person dmle    schedule 15.05.2018
comment
Я попробовал ваше решение, но все равно получаю ту же ошибку. Не могли бы вы привести мне пример? - person Pramod Nikule; 30.07.2018
comment
Какую именно ошибку вы получаете? Post stacktrace + точный фрагмент кода + версия библиотеки appium server и java-client. Это поможет - person dmle; 30.07.2018
comment
Appium не может получить Snackbar, он появляется в течение нескольких секунд. Во время проверки Snackbar исчезнет. Когда я увеличил продолжительность видимости Snackbar, это сработало. Получение следующей ошибки: org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание видимости элемента, расположенного по By.xpath: // * [@ text = 'TO-DO сохранено'] (пытался в течение 10 секунд с Интервал 500 миллисекунд) в org.openqa.selenium.support.ui.WebDriverWait.timeoutException (WebDriverWait.java:81) в org.openqa.selenium.support.ui.FluentWait.until (FluentWait.java:271) - person Pramod Nikule; 30.07.2018
comment
Одна вещь, которую вы могли бы сделать вместо увеличения срока службы закусочной, - это использовать WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis) и указать sleepInMillis, чтобы он был меньше (у меня 10 сработало). Фактически, вы опрашиваете чаще, поэтому больше шансов, что закусочная присутствует. Противоположное решению в вашем комментарии выше. - person JaysonP; 14.08.2018