2013-05-19 27 views
10

它是簡單的,通過指定它的類選擇的元素,PHPUnit中硒2測試用例:選擇PHPUnit中硒2測試情況下,所有匹配元素

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

然而,即使存在的my_class兩個項目,選擇器只挑選其中的一個(可能是第一個)。我如何選擇所有這些?我很感激像allByClassName

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

有沒有像allByClassName東西PHPUnit中硒2延伸?

+0

嗯,你的代碼看起來有點比我的不同,但我也使用NearSoft庫。你的'$ this'是網絡驅動程序的包裝?我找到多個元素的代碼如下所示:'$ this - > _ driver-> findElements(By :: className(「my_class」));'。也許某種方式可以幫助你走向正確的方向,我不知道。 – ragamufin

回答

19

帕維爾,你可以找到指導如何選擇這裏多個元素: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)$ element = $ this-> elements($ this-> using('css selector') - > value('* [class =「my_class」]'))將不會返回具有單一類'my_class'的元素。它不會返回具有多個類的元素。 – Andrew

+0

花了我一段時間才意識到,我必須按照原樣編寫「css選擇器」,而不是通過實際的css選擇器替換它 – Alex

+0

這不是最佳選擇,但實際上瀏覽源確實會顯示發生了什麼http://apigen.juzna .CZ/DOC/sebastianbergmann/PHPUnit的硒/源級-PHPUnit_Extensions_Selenium2TestCase_Element_Accessor.html#70 – MSpreij

1

要通過類選擇多個元素,使用方法:

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

我有完全一樣的問題,所以我想,@大衛張貼的解決方案。它可以工作,但不知何故Selenium試圖一次又一次地找到這個元素,所以我的測試時間僅僅增加了15秒。

要快,我結束了創建我的類ID和計數裏面的元素:

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