【问题标题】:How to scroll down browser page - Laravel Dusk (Browser Tests)如何向下滚动浏览器页面 - Laravel Dusk(浏览器测试)
【发布时间】:2017-03-22 12:49:41
【问题描述】:

我正在使用 [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)
                ;
        });
    }
}

【问题讨论】:

    标签: php laravel laravel-dusk


    【解决方案1】:

    根据@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;
        });
    }
    

    【讨论】:

      【解决方案2】:

      您现在可以使用script 方法:

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

      【讨论】:

        【解决方案3】:

        如果你知道你必须滚动多远,你可以试试:

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

        【讨论】:

        • 我不知道如何使用它。当我尝试时收到错误:Error: Call to a member function pause() on null
        【解决方案4】:

        现在 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;
        }
        

        DIY 实现

        扩展浏览器类,添加如下方法:

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

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

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

        【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-11-05
          • 2018-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多