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

codeception
php
webdriver
selenium
Теги: #<Tag:0x00007fedb9eb4390> #<Tag:0x00007fedb9eb4200> #<Tag:0x00007fedb9eb4048> #<Tag:0x00007fedb9ebbe10>

(Konstantin) #1

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

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


(Ray Romanov) #2

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


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


(Konstantin) #3

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

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

$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 

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


(Ray Romanov) #4

Ну вообще то я бы сделал функцию в 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();

(Konstantin) #5

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

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

(Ray Romanov) #6

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


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

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


(Ray Romanov) #8

еще вариант

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

(Konstantin) #9

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


(Ray Romanov) #10

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


(Konstantin) #11

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


(Ray Romanov) #12

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

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

(Konstantin) #13

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

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

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

(Ray Romanov) #14

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


(Konstantin) #15

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


(Ray Romanov) #16

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


(Konstantin) #17

тоже мимо )

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


(Ray Romanov) #18

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