在PHPUnit Selenium 2测试用例中选择所有匹配的元素


Select all matching elements in PHPUnit Selenium 2 test case

通过指定一个元素的类来选择它是很简单的,在PHPUnit Selenium 2测试用例中:

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

但是,即使有两个my_class项,选择器也只选择其中一个(可能是第一个)。我怎样才能全部选中呢?我喜欢allByClassName:

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

有什么像allByClassName在PHPUnit硒2扩展?

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

按类选择多个元素,使用:

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

WebDriver方法findElements(By By)应该可以完全满足您的需求。

我有完全相同的问题,所以我尝试了@David发布的解决方案。它工作,但不知何故硒试图一次又一次地找到元素,所以我的测试时间增加了15秒就在这。

为了更快,我最终为我的类创建了一个ID,并计算其中的元素:

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