断言每个选定的div元素

时间:2019-03-31 08:10:06

标签: css laravel testing laravel-dusk

我想测试每个选定的div,但它仅测试第一个select元素。

这是DOM:

<div>
    <div>
        <div>
            <div class="select" [datetime="20190101"]>
                <div class="data">{{data}}</div>
                <div class="other"></div>
            </div>
        </div>
    </div>

    <div>
        <div>
            <div class="select" [datetime="20190102"]>
                <div class="data">{{data}}</div>
                <div class="other"></div>
            </div>
        </div>
    </div>

    <!-- and many of them -->
</div>

这是我的测试

/** @test */
public function every_data_should_match()
{
    $this->browse(function (Browser $browser) {
        $browser->visit('/page');

        $browser->whenAvailable('div.select', function ($div) {
            $datetime = $div->attribute('div.data', 'datetime');
            $expected_data = User::where('datetime', $datetime)->first()->data;

            $data = $div->getAttribute('outerHTML');

            $this->assertSame($expected_data, $data);
        }
    }
}
  

应该有很多断言,但是只有一个,   如何解决,以便测试可以迭代每个div.select?

每个.select都属于不同的父对象,所以我不能使用.select:nth-​​child(n)。

1 个答案:

答案 0 :(得分:1)

您可以使用elements()

/** @test */
public function every_data_should_match()
{
    $this->browse(function (Browser $browser) {
        $browser->visit('/page');

        $browser->waitFor('div.select');

        foreach ($browser->elements('div.select') as $select) {
            $datetime = $select->findElement(WebDriverBy::cssSelector('div.data'))->getAttribute('datetime');
            $expected_data = User::where('datetime', $datetime)->first()->data;

            $data = $select->getAttribute('outerHTML');

            $this->assertSame($expected_data, $data);
        }
    }
}