Testování atributu u HTML elementu

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

Ahoj lidi :)
Může mi prosím někdo poradit jak získám například atribut src z obrázku?

Nyní mám takovýto kód, ale už mě nenapadá co bych ještě vyzkoušel :D

	/**
 * @dataProvider getAvailableAccessory
 */
public function testRenderView($name)
{
    $this->tester->testAction('view', 'GET', ['id' => $name]);

    Assert::true($this->tester->dom->has('div#main h1'));
    Assert::count(1, $this->tester->dom->find('h1'));

		// tady netuším jak získat ten atribut src
    $domData = $this->tester->dom->find('div#main img');
    Assert::false(empty($domData->attributes('src')));

}

public function getAvailableAccessory()
{
    $arr = [];
    foreach ($this->products->accessory as $value) {
        $arr[] = [$value->name];
    }
    return $arr;
}

V .actual souboru se vygeneruje tohle

array(
	Tester\DomQuery::__set_state(array(
		'@attributes' => array(
			'src' => '/images/thumbnails/odkapavaci-vanicka.jpg',
			'alt' => 'Odkapávací vanička',
			'style' => 'max-width: 95%;',
		),
	)),
)
Milo
Nette Core | 1283
+
+1
-

Tester\DomQuery dědí ze SimpleXMLElement. Metoda ->find() vrací pole elementů ikdyž je ve výsledku pouze jeden:

$images = $dom->find('div#main img');
Assert::count(1, $images);

# Ten jeden konkrétní
$img = $images[0];

K dětem elementu přistupuješ magicky přes property, např. smyšlený: $html->body->div[4]->img[6]....
K atributům přes array access: $img['src']

Assert::same('vanicka.jpg', (string) $img['src']);

# Nebo všechny atributy
Assert::same([....], array_to_iterator($img->attributes()));

SimpleXMLElement metody dost často vrací iterátor. A když si dumpneš jejich výsledek, nevidíš nic. Musí se převést na pole.

EDIT: A atribut $img['src'] musíš přetypovat na string.

Editoval Milo (1. 10. 2014 21:41)

vymak
Člen | 92
+
0
-

Díky moc za vysvětlení :)
Teď když se na to dívám tak jsem vyzkoušel snad všechny možnosti, ale tu nejjednoduší jsem nevyzkoušel :D