Как прокрутить страницу браузера вниз - Laravel Dusk (тесты браузера)

Я готовлю тесты с помощью [Browser Tests (Laravel Dusk)] [1]

[1]: https://laravel.com/docs/5.4/dusk и мне нужна сила щелкните элемент, который не отображается, прежде чем прокрутить страницу браузера вниз. Как можно определить в сумерках, чтобы щелкнуть невидимый элемент или прокрутить страницу браузера?

class SliderTest extends DuskTestCase
{
    /**
     * A Dusk test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->browse(function ($browser) {
            $browser
                    ->visit('http://localhost:8000/admin/login')                    
                    ->click('label[for=test_1]')
                    ->pause(500)
                ;
        });
    }
}

person Tomasz    schedule 22.03.2017    source источник


Ответы (5)


На основании ответа @james

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

public function testExample()
{
    $this->browse(function ($browser) {
        $browser
                ->visit('http://localhost:8000/admin/login')
                ->driver->executeScript('window.scrollTo(0, 500);'); 
                // can't chain methods after this
        $browser                    
                ->click('label[for=test_1]')
                ->pause(500) //you can keep chaining here;
    });
}
person Christophvh    schedule 27.03.2017

Теперь вы можете использовать метод script:

$browser->script('window.scrollTo(0, 500);');

person BrianEDT    schedule 30.04.2017

Если вы знаете, как далеко вам нужно прокручивать, вы можете попробовать:

$browser->driver->executeScript('window.scrollTo(0, 500);');
person James I    schedule 26.03.2017
comment
Я не знаю, как им пользоваться. При попытке я получаю сообщение об ошибке: Error: Call to a member function pause() on null - person Tomasz; 27.03.2017

Теперь поддерживается laravel / dusk 6.0

используемая реализация: https://github.com/laravel/dusk/blob/5eb7fa57346fd39b3b38e4c4bdd5ca177d1ac711/src/Browser.php#L282-L297

public function scrollTo($selector)
{
    $this->ensurejQueryIsAvailable();

    $selector = $this->resolver->format($selector);

    $this->driver->executeScript("jQuery(\"html, body\").animate({scrollTop: jQuery(\"$selector\").offset().top}, 0);");

    return $this;
}

Реализация своими руками

Расширьте класс браузера и добавьте следующий метод:

public function scrollTo($elementSelector)
{
   return $this->driver->executeScript("document.querySelector('$elementSelector').scrollIntoView()");
}

затем вы можете перейти к селектору:

$browser->scrollTo("#elementId");
person Joel Harkes    schedule 28.11.2019
comment
Теперь в ядре Dusk доступен несколько иной метод прокрутки: github.com/laravel/dusk/blob/ - person u01jmg3; 15.04.2020
comment
Спасибо за уведомление - person Joel Harkes; 15.04.2020

Если вам нужно пролистать всю страницу, вы можете использовать следующие коды

$this->browse(function(Browser $browser){
    $browser->visit('http://localhost:8000/admin/login')
    
    ->script('window.scrollTo(0,document.body.scrollHeight)');

   //The above returns an array, but not the $browser object. Therefore, the output cannot be chained.

    $browser->pause(500)
    ->click('label[for=test_1]');  
    
   });
person Bandula Dharmadasa    schedule 31.05.2021