утверждать каждый выбранный элемент div - PullRequest
2 голосов
/ 31 марта 2019

Я хочу проверить каждый выбранный элемент div, но он проверяет только первый элемент выбора.

Это 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 Ответ

1 голос
/ 01 апреля 2019

Вы можете использовать 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);
        }
    }
}
...