Выберите все подходящие элементы в тестовом примере PHPUnit Selenium 2

Просто выбрать элемент, указав его класс, в тестовом примере PHPUnit Selenium 2:

$element = $this->byClassName("my_class");

Однако, даже если есть два элемента my_class, селектор выбирает только один из них (возможно, первый). Как я могу выбрать все из них? Я бы оценил что-то вроде allByClassName:

$elements = $this->allByClassName("my_class");
foreach($elements as $element) {
    doSomethingWith($element);
}

Есть ли что-то вроде allByClassName в расширении PHPUnit Selenium 2?

Ответ 1

Pavel, вы можете найти руководство по выбору нескольких элементов здесь: https://github.com/sebastianbergmann/phpunit-selenium/blob/b8c6494b977f79098e748343455f129af3fdb292/Tests/Selenium2TestCaseTest.php

линии 92-98:

public function testMultipleElementsSelection()
{
    $this->url('html/test_element_selection.html');
    $elements = $this->elements($this->using('css selector')->value('div'));
    $this->assertEquals(4, count($elements));
    $this->assertEquals('Other div', $elements[0]->text());
}

(Этот файл содержит тесты для самого класса Selenium2TestCase, поэтому он отлично подходит для изучения его возможностей)

Следуя этому методу, вы можете получить все элементы с определенным классом следующим образом:

    $elements = $this->elements($this->using('css selector')->value('*[class="my_class"]'));

Надеюсь, что это поможет.

Ответ 2

Чтобы выбрать несколько элементов по классам, используйте:

$elements = $this->elements($this->using('css selector')->value('.my_class'));

Ответ 3

Метод WebDriver findElements (By by) должен делать именно то, что вам нужно.

Ответ 4

У меня была точно такая же проблема, поэтому я попробовал решение, которое отправил @David. Это работает, но почему-то Selenium пытался найти элемент снова и снова, поэтому мое тестовое время увеличилось на 15 секунд именно на этом.

Чтобы быть быстрее, я закончил создание идентификатора для моего класса и подсчета элементов внутри:

$elements = $this->elements($this->using('css selector')->value('#side-menu li'));
$this->assertEquals(0, count($elements));