如何向下滚动浏览器页面 - Laravel Dusk(浏览器测试)

时间:2017-03-22 12:49:41

标签: php laravel laravel-dusk

我正在使用[浏览器测试(Laravel Dusk)] [1]

准备测试

[1]:https://laravel.com/docs/5.4/dusk我需要在向下滚动浏览器页面之前强制点击要查看的元素。如何在黄昏测试中定义点击unsee元素或滚动浏览器页面?

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)
                ;
        });
    }
}

5 个答案:

答案 0 :(得分:10)

基于@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;
    });
}

答案 1 :(得分:5)

您现在可以使用script方法:

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

答案 2 :(得分:3)

如果你知道你需要滚动多远,你可以尝试:

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

答案 3 :(得分:0)

扩展浏览器类并添加以下方法:

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

然后您可以滚动到选择器:

$browser->scrollTo("#elementId");

答案 4 :(得分:0)

如果需要扫过整个页面可以使用以下代码

$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]');  
    
   });