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