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
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
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)