Скролл к элементу на экране Android приложения

я также использую driver.scrollTo, пока другого более оптимального варианта не нашла

1 лайк

Привожу пример своей реализации на РНР.
Фрагмент из теста:

...
$maxScrols = //тут присваивается значение = (кол-ва элементов из базы / на элементов на странице)
$a = 0;
  while (!$I->canSeeElement(['name' => $nameWoD]) && ($a < $maxScrols)) { // скроллим до тех пор пока не найдем искомое или не прокрутим весь список
    $I->pageDown(1, '#ru.livemaster:id/lvOwnShop'); // одну страницу в низ по id скроллируемого элемента
    $I->waitForElement('#ru.livemaster:id/master_shop_item'); // на всякий случай, что скролл завершился
    $a++; // увеличиваем счетчик 
   }
...

Сама функция pageDown:

public function pageDown($pages = 1, $scrollElement = null) {
  $selector = $this->scrollSelector($scrollElement); // тут свой механизм определяющий передал я id или class скроллируемого элемента
  if ($pages > 0) {
    for ($i = 1; $i <= $pages; $i++) {
      try {
        $this->byAndroidUIAutomator('new UiSelector().' . $selector . ';')->enabled(); // проверка что данный элемент существует
        $this->execUIA('new UiScrollable(new UiSelector().' . $selector . ').scrollForward();'); // скролл вниз 1 страница
      } catch (Exception $e) {
        $this->execUIA('new UiScrollable(new UiSelector().className("android.widget.ListView").scrollForward();'); // если не определен скроллируемый элемент то по умолчанию первый найденный android.widget.ListView
      }
    }
  }
}

Таким же способом реализовано pageUp только .scrollForward() замене на .scrollBackward(). По похожему принципу реализованы также механизмы рывка в верх и в низ.

1 лайк

чушь пишете Ви - так как задача которую ви тут привели с кнопкой About тривиальная

1 лайк

Я тоже Ору с Тараса…

1 лайк

Что значит

Количевство прокруток можно коректировать??

То я в цикле буду крутить 10 раз, то 5? Что за бред, а как мне определить сколько раз крутить на данной странице? А если элементов бесконечное множество то что ?
Верить Вам я не буду!
В данном случае у Вас отрабатывает. И я уверен, что в большинстве Ваших кейсов отрабатывает, но Вы хоть понимаете, что происходит у Вас с точки зрения кода, как долго это отрабатывает…

1 лайк

та никто не говорит никому верить, есть проблема, - есть 100500 вариантов решения… по моему ми друг друга не поняли, - закриваем холивар.

1 лайк

(без применения форматирования)`ето значит что он должен бить в layout - About нету в layout - оно работает у Вас ?

Работает, потому что принцип тот же что у Вас, но он оптимизирован это стандартная реализация от Google. Он скролит ровно до того элемента, который указан в локаторе и не важно есть ли он сейчас в DOM или нет. Если его вообще нет на странице (не в DOM), то выдаст ошибку после того как пройдется по всей странице вниз потом вверх.

1 лайк

Холивар закрыть нельзя, потому что кто-то Увидит Ваш г…код, скопирует, и будет рад. Есть элегантные, быстрые, и, наконец, стандартные решения. Вы предпочитаете костыли. Другим костыли зачем предлагать?

1 лайк

Не может оно отрабатывать - разве что на IOS :slight_smile:
На входе WebElement, что нонсенс для Android’a. Так как мы не можем найти то, чего нет.

1 лайк

код бил написан на коленке…гвно ни гоно не тебе судить, ето не го**код “driver.findElementByAndroidUIAutomator(“new UiScrollable(new UiSelector().scrollable(true).instance(0))” +
“.scrollIntoView(new UiSelector().resourceId(” + elemId + “).instance(0))”);” ?))))))

1 лайк

извини чувак, но мне достаточно кода с твоего github-а - у меня все … так что не тебе судить о га**коде)

1 лайк

Выключите свой комплекс Наполеона. И послушайте советы

1 лайк

меняю свой гакод на вам гаокод

1 лайк

Я, к глубокому своему стыду, не понимаю Ваш русский

1 лайк

то українська)

1 лайк

Ответы даны, флейм прекращаем. Тема закрыта.

2 лайка