2013-05-19 12 views
10

To proste, aby wybrać element, określając klasę, w PHPUnit Selen przypadku 2 badania:Wybierz wszystkie elementy pasujące w PHPUnit Selen przypadku 2 testowym

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

Jednakże, nawet jeśli istnieją dwie pozycje my_class, selektor wybiera tylko jedną z nich (prawdopodobnie pierwszą). Jak mogę wybrać wszystkie z nich? Byłbym wdzięczny coś podobnego allByClassName:

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

Czy istnieje coś takiego jak allByClassName w PHPUnit Selen 2 rozszerzenia?

+0

Hmm, kod wygląda trochę inaczej niż ja, ale jestem również za pomocą biblioteki NearSoft. Czy twoje '$ this' jest opakowaniem dla sterownika sieciowego? Mój kod do znajdowania wielu elementów wygląda mniej więcej tak: '$ this -> _ driver-> findElements (By :: className (" my_class "));'. Może jakoś to pomoże ci pójść we właściwym kierunku, nie wiem. – ragamufin

Odpowiedz

19

Pavel można znaleźć wskazówki, w jaki sposób wybrać wiele elementów tutaj: https://github.com/sebastianbergmann/phpunit-selenium/blob/b8c6494b977f79098e748343455f129af3fdb292/Tests/Selenium2TestCaseTest.php

linie 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()); 
} 

(Plik ten zawiera testy dla samej klasie Selenium2TestCase, więc to jest wielki aby poznać jego możliwości):

Po zastosowaniu tej metody można pobrać wszystkie elementy z określoną klasą:

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

Mam nadzieję, że to pomoże.

+1

(-1) $ elements = $ this-> elements ($ this-> using ("selektor css") -> value ('* [class = "my_class"]')) zwróci tylko elementy z jedną klasą "my_class". Nie zwróci elementów z wieloma klasami. – Andrew

+0

Minęło trochę czasu, aby uświadomić sobie, że muszę napisać "selektor css" tak jak jest - i nie zastąpić go rzeczywistym selektorem css – Alex

+0

To nie jest optymalne, ale w rzeczywistości przeglądanie źródła pokazuje, co się dzieje http: //apigen.juzna .cz/doc/sebastianbergmann/phpunit-selenium/source-class-PHPUnit_Extensions_Selenium2TestCase_Element_Accessor.html # 70 – MSpreij

1

Aby zaznaczyć wiele elementów o klasie użyć:

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

miałem dokładnie ten sam problem, więc starałem się rozwiązanie, które @David wysłana. Działa, ale jakoś Selen próbował znaleźć ten element raz za razem, więc mój czas testu wzrósł o 15 sekund właśnie na tym.

być szybsze, skończyło się tworząc identyfikator dla mojej klasie i liczenie elementów wewnątrz:

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