Как прокрутить страницу в Appium + Python

Я создаю тесты, используя Appium + Python, чтобы протестировать приложение IOs. Я хочу прокрутить страницу. Вот код

    def scroll_page(self):
       action = TouchAction(self)
       action.press(BrowsePageElements.firs_element_to_scroll(self)).
              move_to(BrowsePageElements.second_element_to_scroll(self)).perform()

Когда я пытаюсь запустить эту функцию, я получаю сообщение об ошибке

скриншот ошибки

Не могли бы вы помочь мне узнать, как исправить эту ошибку?


person rotwildherzen    schedule 26.07.2017    source источник
comment
Что такое ваш объект «scroll_browser_page»? Вы уверены, что правильно находите свой элемент?   -  person barbudito    schedule 23.01.2018


Ответы (3)


В настоящее время это работает для меня:

    ...
    SCROLL_DUR_MS = 3000
    ...
    window_size = self.driver.get_window_size()
    self.scroll_y_top = window_size['height'] * 0.2
    self.scroll_y_bottom = window_size['height'] * 0.8
    self.scroll_x = window_size['width'] * 0.5
    ...

def scroll_up(self):
    self._y_scroll(self.scroll_y_top, self.scroll_y_bottom)

def scroll_down(self):
    self._y_scroll(self.scroll_y_bottom, self.scroll_y_top)

def _y_scroll(self, y_start, y_end):
    actions = TouchAction(self.driver)
    actions.long_press(None, self.scroll_x, y_start, SCROLL_DUR_MS)
    actions.move_to(None, self.scroll_x, y_end)
    actions.perform()

Он медленно прокручивается в течение 3 секунд, потому что я хочу, чтобы он контролировался, но вы можете сократить SCROLL_DUR_MS (длительность действия прокрутки в миллисекундах), если хотите что-то более масштабное. Я также отказался от использования элементов в качестве начальной и/или конечной точки, потому что хотел чего-то общего, что работало бы с любым содержимым экрана.

Для scroll_y_top и scroll_y_bottom я выбрал 20% сверху и снизу экрана, просто чтобы убедиться, что я ничего не задеваю за границы (например, панель навигации в верхней части настроек iOS или информационная панель в нижней части экрана). приложение, в котором я работал). Я также столкнулся с ошибкой, из-за которой он не прокручивался, когда я оставил scroll_x равным 0, но оказалось, что он не регистрировал левый край, как внутри области прокрутки для приложения, в котором я работал.

Надеюсь это поможет.

person user14919794    schedule 06.02.2021

В прошлом, когда я сталкивался с проблемами прокрутки по той или иной причине, я просто прокручивал страницу вниз, используя координаты.

self.driver.swipe(100, 700, 100, 150)
person Eric    schedule 23.01.2018
comment
Этот метод устарел - person barbudito; 23.01.2018

В Appium Python есть встроенная функция scroll. Он работает как для Android, так и для iOS.

driver.scroll(origin_el, destination_el, duration=None), где продолжительность — необязательный аргумент. Эта функция прокручивает origin_el до местоположения destination_el.

Ссылка на исходный код

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

person Surilan    schedule 28.03.2019