Тестирование приложения iOS на симуляторе с Appium - элемент не найден

Я использую клиент Appium для записи и создания сценария тестирования для моего приложения iOS. В Инспекторе приложений я могу нажать кнопку входа в систему и сгенерировать скрипт (на Python), как показано ниже:

els1 = driver.find_elements_by_accessibility_id("login")
els1[0].click()

Я могу успешно войти в свое приложение, нажав кнопку в Инспекторе приложений, но у меня возникла ошибка при запуске скрипта на терминале Mac:

els3 [0] .click ()

IndexError: список индекса вне допустимого диапазона

Я пробовал разными способами получить доступ к элементу кнопки с помощью accessibility id, name и class name, но ничего из вышеперечисленного не помогло.

Что я пропустил? Это ошибка программного обеспечения Appium?


person devdork    schedule 24.08.2018    source источник


Ответы (2)


Эта ошибка «IndexError: индекс списка вне диапазона» появляется, если мы пытаемся получить доступ к списку по индексу, которого нет внутри диапазона списка.

e.g.

thislist = ["apple", "banana", "cherry"] // here list index range is 0-2
thislist[1] = "blackcurrant" // this works fine as value of index is in range 0-2

Но если я попробую ниже

// this is run time error i.e. "IndexError: list index out of range"
//  as value of index is out of range 0-2
    thislist[3] = "blackcurrant" 

Примечание. Индекс списка начинается с 0

Рассмотрим случай, когда метод find_elements_by_accessibility_id ("login") не возвращает ни одного элемента по какой-либо причине.

els1 = driver.find_elements_by_accessibility_id("login");

И я пытаюсь получить доступ к списку els1 с нулевым индексом, который пуст, поэтому я получаю сообщение об ошибке «IndexError: индекс списка вне допустимого диапазона».

Теперь перед доступом к списку мы проверим, не пуст ли список.

els1 = driver.find_elements_by_accessibility_id("login")
if els1:
   els1[0].click()
else :
   print "Element not found and els1 array is empty"        
person Amit Jain    schedule 24.08.2018
comment
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. - person Nic3500; 25.08.2018
comment
Есть ли способ правильно получить доступ к элементу, чтобы список не был пустым? - person devdork; 27.08.2018
comment
Список будет пустым или не будет зависеть от стратегии локатора, мы всегда можем проверить размер списка перед щелчком по элементу, чтобы избежать исключения в коллекции (списке), которую мы используем для хранения элементов. - person Amit Jain; 27.08.2018

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

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

Поэтому между каждым взаимодействием просто подождите секунду:

el1 = driver.find_element_by_accessibility_id("login")
el1.click()
// wait for the view to get updated
driver.implicitly_wait(1)

els2 = driver.find_elements_by_name("Edit")
els2[0].click()

И сценарий будет работать, как ожидалось.

person devdork    schedule 29.08.2018