2014-10-30 2 views
1

Привет Я хочу знать, как прокручивать в appium с помощью питонаКак листать с помощью appium в Python

Я сделал это в Java, прежде чем, и она работала очень хорошо.

driver.scrollTo("Destination"); 

Однако я не могу сделать то же самое в python. Я довольно новыми для Python, и я стараюсь делать несколько способов прокрутки

Один способ, которым я попытался было

el1 = self.driver.find_element_by_name('Starting') 
el2 = self.driver.find_element_by_name('Ending') 
self.driver.scroll(el1, el2) 

второй способ, которым я попытался было

self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("DesinationText").instance(0));'). 

второй способ прокрутки один раз, но Бесполезный» t прокрутите весь путь вниз, чтобы он выбросил исключение NoSuchElementException. Кроме того, может кто-нибудь объяснить мне, какие экземпляры находятся в UiSelector? Я прочитал описание, но я не совсем понял

Экземпляр: установите критерии поиска, соответствующие виджету по его номеру экземпляра.

+0

@Ganwk, ваш запрос автомата пользовательского интерфейса должен иметь любой вид scrollview, например listview, gridview или recyclerview. Пожалуйста, проверьте это видео, которое добавляет команды appium 1.5.3 для версии: https://www.youtube.com/watch?v=bT3tqaLNn-Y – Manidroid

ответ

1

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

action = TouchAction(self.driver) 
el = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, loc))) 
action.press(el).move_to(x=10, y=-500).release().perform() 
+0

- отрицательное значение, работающее для вас? Coz, когда дает отрицательную ось y, Координаты, предоставленные операции взаимодействия, недействительны. – vks

-1

экземпляр (I), как индекс (I), но по какой-то причине работает лучше.

для чего он используется? предположим, что в текущей активности, которую мы тестируем (которая присутствует на экране), есть 10 видов TextView. в этом случае следующий селектор:

новый UiSelector() имя класса ("android.widget.TextView")

хороший матч для всех 10 просмотров TextView мы имеем на. screen, но если вы не укажете точно, какой экземпляр \ index вы хотите сопоставить, он будет возвращать первый по умолчанию. Но, давайте предположим, что вы хотите иметь матч специально для 10-TextView, просто используйте следующий селектор:..

новый UiSelector() имя класса ("android.widget.TextView") экземпляр (10)

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

def scroll_to_text(text): 
try: 
    element = driver.find_element_by_android_uiautomator(
     'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("'+text+'").instance(0));') 
    return element 
except NoSuchElementException: 
    logger.error('it was not found') 
    return None 
except Exception, e: 
    logger.error("Unexpected error:") 
    logger.exception(e) 
    return None 

Так что я предполагаю, что у вас есть другая проблема, чем то, что вы думали изначально. Обратите внимание:.

  1. новый UiSelector() текст («DesinationText») будет пытаться соответствовать элемент , который будет иметь точный текст «DesinationText». если он содержится в большем тексте, он не будет соответствовать.
  2. новый UiScrollable (новый UiSelector(). Прокручиваемый (true) .instance (0) 'в вашем коде предполагает, что на текущем есть только один прокручиваемый элемент.возможно, у вас есть два списка, а текст находится в другом listview или любом другом прокручиваемом элементе?

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

0

self.driver.scroll(el1, el2) не работает для меня.

Я начал использовать

self.driver.swipe(470, 1400, 470, 1000, 400) 

driver.swipe(start_x, start_y, end_x, end_y, duration) будет доступен в _touch.py ​​файле

Размах медленно, добавить логику, чтобы проверить, если элемент присутствует - по-прежнему до найден элемент.

Смежные вопросы