Nette/Tester Tester\DomQuery has seznam li

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 551
+
0
-

Zdravím,

mám následující list:

<ul class="menu">
   <li>Úvod</li>
   <li>O nás</li>
   <li>Programy</li>
   <li>Kontakt</li>
   <li>Login</li>
</ul>

Získám si dom stránky, to je OK:

$html = (string) $response->getSource();
$dom = Tester\DomQuery::fromHtml($html);

Jak zjistím že 5 položka v seznamu ul.menu má hodnotu „Login“ ????

Díky

Milo
Nette Core | 1283
+
+1
-

DomQuery (a tedy $dom) dědí ze SimpleXMLElement, koukni do PHP manuálu.

motorcb
Člen | 551
+
0
-

@Milo díky, ale to se mi právě nedaří a moc nevím jak na to :-( Můj pokus, který nefunguje:

Assert::same( 'Login', $dom->find( "//ul[@class='menu'] li[5]" ) );
Jan Suchánek
Člen | 404
+
0
-

a němělo by to být nějak takto?

	Assert::same( 'Login', $dom->find('ul.menu li', 4));

viz dokumentace.

Editoval jenicek (23. 4. 2015 16:09)

motorcb
Člen | 551
+
0
-

@jenicek bohužel taky neprojde :-(

Failed: array(Tester\DomQuery(#90e1), Tester\DomQuery(#112f), Tester\DomQuery(#d908), ...) should be 'Login' in testHomepage()

HompeageTest.actual:

array(
	Tester\DomQuery::__set_state(array()),
	Tester\DomQuery::__set_state(array()),
	Tester\DomQuery::__set_state(array()),
	Tester\DomQuery::__set_state(array()),
	Tester\DomQuery::__set_state(array()),
)

HompeageTest.expected:

Login

Tuší někdo proč?

David Matějka
Moderator | 6445
+
+1
-

Tak vidis, ze to vraci pole s peti polozkami. Takze pata bude pravdepodobne to co chces. A z dokumentace SimpleXmlElement-u se dozvis, ze ma __toString metodu, takze k hodnote se dostanes pomoci:

(string) $dom->find('ul.menu li')[4];
motorcb
Člen | 551
+
0
-

@DavidMatějka díky davide. Fnguje! Ještě to trochu zkomplikuju :-)

<ul class="menu">
   <li><a href="uvod">Úvod</a></li>
   <li><a href="o-nas">O nás</a></li>
   <li><a href="program">Programy</a></li>
   <li><a href="kontakt">Kontakt</a></li>
   <li><a href="login">Login</a></li>
</ul>

Jak si nyní sáhnu na 5 položku v ul.menu ve které chci textový obsah odkazu? Díky :-)

David Matějka
Moderator | 6445
+
+1
-
(string) $dom->find('ul.menu li a')[4]['href'];