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

oiopk7p5  于 2022-12-27  发布在  其他
关注(0)|答案(6)|浏览(167)

我正在使用[浏览器测试(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)
                ;
        });
    }
}
gcmastyq

gcmastyq1#

根据@james的回答
你可以执行脚本,但是不能链接。2所以你可以在点击发生之前执行滚动。

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

fumotvh32#

现在可以使用script方法:
$browser->script('window.scrollTo(0, 500);');

cotxawn7

cotxawn73#

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

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

b4wnujal4#

现在受laravel/dustn6.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;
}

DIY实施

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

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

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

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

qjp7pelc5#

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

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

t0ybt7op6#

我认为最好使用Laravel指南,你应该使用''像下面:

$browser->scrollIntoView('.selector')
        ->click('.selector');

和Laravel文档链接Laravel 9 doc

相关问题