通过在PHPUnit Selenium 2测试用例中指定其类来选择元素很简单:
$element = $this->byClassName("my_class");
但是,即使有两个my_class
项,选择器也只选择其中一项(可能是第一项)。我该如何选择所有这些?我很感激allByClassName
:
$elements = $this->allByClassName("my_class");
foreach($elements as $element) {
doSomethingWith($element);
}
PHPUnit Selenium 2扩展中是否有类似allByClassName
的内容?
答案 0 :(得分:19)
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"]'));
希望这有帮助。
答案 1 :(得分:1)
要按类选择多个元素,请使用:
$elements = $this->elements($this->using('css selector')->value('.my_class'));
答案 2 :(得分:0)
WebDriver方法findElements(By by)应该完全符合您的需要。
答案 3 :(得分:0)
我有完全相同的问题,所以我尝试了@David发布的解决方案。它有效,但Selenium试图一次又一次地找到该元素,所以我的测试时间就增加了15秒。
为了更快,我最终为我的班级创建了一个ID并计算了里面的元素:
$elements = $this->elements($this->using('css selector')->value('#side-menu li'));
$this->assertEquals(0, count($elements));