断言页面上有一定数量的元素

时间:2017-02-14 05:12:31

标签: php selenium-webdriver laravel-5 laravel-5.4 laravel-dusk

我正在用Laravel Dusk写一个测试,以确保在索引页面上有10篇文章。

以下是一些HTML代码:

<h1>A list of articles</h1>
<ul>
    @foreach($articles as $article)
        <li class="article-item"> {{ $article->title }}</li>
    @endforeach
</ul>

我原以为在我的测试文件中我可以先选择所有li.article-item,然后断言有10个这样的元素。

代码可能是:

$this->browse(function ($browser) {
    $browser->visit('/articles')
        ->assertSee('A list of articles');
    // no such method
    $elements = $browser->findElements('.article-item');

    $this->assertCount(10, $elements);

});

但事实上,看起来Laravel Dusk并不支持同时选择多个元素。那么在这种情况下我如何构建我的测试?在Dusk中我是否有机会使用WebDriver API来选择这些元素?

谢谢!

1 个答案:

答案 0 :(得分:1)

事实证明$浏览器实例存储了它正在使用的驱动程序,这意味着在测试方法中我实际上可以通过WebDriver API选择HTML元素。

所以可能的解决方案可能是

/** @test */
public function it_displays_a_list_of_articles()
{
    $this->browse(function ($browser) {
        $browser->visit('/articles');
        $elements = $browser->driver->findElements(WebDriverBy::className('article-item'));
        $this->assertCount(10, $elements);
    });
}