как правельно делать скроллинг в мобильной версии сайта

сталкнулся с проблеммой, на мобильной версии сайта скроллинг работает путём драг & дропа, классическая прокрутка не работает. Как в селениуме “по уму” скролить страницу, потамучто то что находится вне экрана он выкидывает как ошибку Элемент не виден.

Сейчас я запилил костыль: беру нижний эдемент на экране и через $I->dragAndDrop тащу на верхней элемент, тогда страница скролится. Но наверника можно сделать както более по уму.

Скорее всего надо запиливать свой метод в хелпер для скролла мобильной версии, исходя из этого:

Сейчас в вебдрайвер фейсбука загляну что там есть.
Ага есть класс WebDriverScrollAction, т.е. можно делать свою скролл хелп функцию.

как пользоваться этими классами

я пытаюсь сделать так:

$I->executeInSelenium(function(\Facebook\WebDriver\Interactions\WebDriverTouchActions $webdriver) {
            $webdriver->scroll(0, 200);
            $webdriver->perform();
        });

но получаю вот такую ошибку:

[PHPUnit_Framework_Exception] Argument 1 passed to MasapQuoteErrorsCest::{closure}() must be an instance of Facebook\WebDriver\Interactions\WebDriverTouchActions, instance of Facebook\WebDriver\Remote\RemoteWebDriver given, called in /home/klazorkin/autotests/TravelFrontendSeleniumTestingSystem/src/Codeception/Module/WebDriver.php on line 1685 and defined 

Как с ними правильно работать?

Ну вообще то я бы сделал функцию в AcceptanceHelper.php типа:

public function scrollMobileSuite($xoffset, $yoffset)
    {
      $wb = $this->getModule('WebDriver')->webDriver;
      $action = new \WebDriverActions($wb);
      $action->scroll($xoffset, $yoffset)->perform();
    }

Проверить не могу к сожалению
Может быть, что строка действия должна будет выглядеть так:

$action->touchScreen->scroll($xoffset, $yoffset)->perform();

теперь выдаёт такую ошибку

[Facebook\WebDriver\Exception\UnknownServerException] Underlying driver does not implement advanced user interactions yet.

на первом или втором варианте?

public function scrollMobileSuite($xoffset, $yoffset)
{
  $wb = $this->getModule('WebDriver')->webDriver;
  $action = new \WebDriverActions($wb);
  $action->scroll($xoffset, $yoffset)->perform();
}

вот в этой интерпретации, (touchScreen он не видит)

еще вариант

public function scrollMobileSuite($xoffset, $yoffset)
{
  $wb = $this->getModule('WebDriver')->webDriver;
  $action = new \WebDriverTouchActions($wb);
  $action->scroll($xoffset, $yoffset)->perform();
}

так я тоже побывал, таже ошибка

Ну что смог то предложил :coffee:

Спасибо, дальше сёрфинг по просторам

хотя, костыль:

$I->executeJS('window.scrollBy(0, 250);');

это первое что я попробывал, на странице он не работает потамучто простой скролинг отключин. Доступен только свайп.

Но такой костыль работает

$I->dragAndDrop('.b-search-form','.b-details');

Раз так, тогда куда делся тачскрин, хм
dragAndDrop работает через мыша.

про touchScreen он пишет что Member has protected access

А отправить клавиши PAGE_UP, PAGE_DOWN ?

тоже мимо )

на странице стоит какойто ЖС плагин который все действия обрубает кроме свайпов

Ну тогда радикальное решение: Genymotion + Appium, и тестить на мобильном браузере