Кэшированные элементы больше не существуют в DOM - PullRequest
0 голосов
/ 14 января 2020

Как и в аналогичном выпуске, я использую appium + java. Пытаясь выбрать элементы

В мобильном приложении я go на странице, и после этого, есть много элементов android .widget.ImageView (0), мне нужно выбрать 6 (например) таких элементов и go с другими шагами. Байт может выбрать только один элемент и затем получить такое исключение:

org.openqa.selenium.StaleElementReferenceException: Cached elements 'By.id: com.company:id/selector_view' do not exist in DOM anymore

public GalleryPage choosePhotosFromAlbum(int count) {
        List<MobileElement> photos = driver.findElementsById(elements.get("photo from gallery album selector"));
        for (int i = 0; i < count; i++) {
            photos.get(i).click();
        }
        return new GalleryPage(device);
    }

1 Ответ

0 голосов
/ 10 февраля 2020

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

Попробуйте поместить фотографии в цикл for, например:

public GalleryPage choosePhotosFromAlbum(int count) {

        for (int i = 0; i < count; i++) {
            List<MobileElement> photos = driver.findElementsById(elements.get("photo from gallery album selector"));            
            photos.get(i).click();
        }
        return new GalleryPage(device);
}

Это способ получения списка фотографий из обновленного DOM в каждом цикле.

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

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