2013-05-19 11 views
10

È semplice selezionare un elemento specificando sua classe, in PHPUnit Selenio caso 2 Test:Seleziona tutti gli elementi corrispondenti a PHPUnit Selenio caso 2 prova

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

Tuttavia, anche se ci sono due elementi di my_class, il selezionatore ne sceglie solo uno (probabilmente il primo). Come posso selezionarli tutti? Ti sarei grato qualcosa come allByClassName:

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

C'è qualcosa di simile allByClassName in PHPUnit Selenio 2 estensione?

+0

Hmm, il codice sia un po 'diversa dalla mia, ma sto anche usando la libreria NearSoft. Il tuo '$ this' è un wrapper per il driver web? Il mio codice per trovare più elementi assomiglia a questo: '$ this -> _ driver-> findElements (By :: className (" my_class "));'. Forse in qualche modo ti può aiutare nella direzione giusta, non lo so. – ragamufin

risposta

19

Pavel, è possibile trovare una guida su come selezionare più elementi qui: https://github.com/sebastianbergmann/phpunit-selenium/blob/b8c6494b977f79098e748343455f129af3fdb292/Tests/Selenium2TestCaseTest.php

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

(Questo file contiene i test per la classe Selenium2TestCase in sé, quindi è ottimo per conoscere le sue capacità)

Seguendo questo metodo, è possibile recuperare tutti gli elementi con una certa classe come questa:

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

Spero che questo aiuti.

+1

(-1) $ elementi = $ this-> elementi ($ this-> using ('css selector') -> value ('* [class = "my_class"]')) restituirà solo elementi con una singola classe di 'my_class'. Non restituirà elementi con più classi. – Andrew

+0

Mi ci è voluto un po 'per capire che devo scrivere "selettore css" così com'è - e non sostituirlo con un vero selettore css – Alex

+0

Non è ottimale, ma in realtà la navigazione nella fonte ti mostra cosa sta succedendo http: //apigen.juzna .cz/doc/sebastianbergmann/phpunit di selenio/source-class-PHPUnit_Extensions_Selenium2TestCase_Element_Accessor.html # 70 – MSpreij

0

Il metodo WebDriver findElements(By by) dovrebbe fare esattamente quello che ti serve.

+0

non disponibile nella versione di PHP – tishma

1

Per selezionare più elementi per classe, utilizzare:

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

Ho avuto esattamente lo stesso problema, così ho provato la soluzione che @ David postato. Funziona, ma in qualche modo il Selenium stava cercando di trovare l'elemento ancora e ancora, quindi il mio tempo di test è aumentato di 15 secondi proprio su questo.

essere più veloce, ho finito per creare un ID per la mia classe e contando gli elementi all'interno:

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