DOM: find na vysledky find – omezování vyhledání
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- motorcb
- Člen | 552
Zdravím, hraji si Testerem a není mi jasné zda je možné vyhledat div a v něm vyhledávat další elementy a ty testovat.
Příklad:
public function testForm()
{
$html = '<form action="" method="post">
<div class="form-group required">
<label class="required">Email:</label>
<input type="text" name="email" required class="form-control">
</div>
<div class="form-group required">
<label class="required">Heslo:</label>
<input type="password" name="password" required class="form-control">
</div>
<div class="form-group">
<div class="checkbox"><label><input type="checkbox" name="remember">Zapamatovat</label></div>
</div>
<div class="form-group">
<input type="submit" name="send" class="btn btn-primary" value="Submit">
</div>
</form>';
$dom = Tester\DomQuery::fromHtml($html);
//najdu prvni div a provedu na nej testy, to je OK
$div0 = $dom->find('div')[0];
$divLabel0 = $div0->find('label')[0];
$divInput0 = $div0->find('input')[0];
Assert::same('Email:', (string) $divLabel0);
Assert::same('form-control', (string) $divInput0->attributes()["class"]);
//najdu druhy div a provedu testy na jeho elementy, tady je problem
$div1 = $dom->find('div')[1];
$divLabel1 = $div1->find('label')[0];//problem najde 1. label v celem formulari
$divInput1 = $div1->find('input')[0];
Assert::same('Heslo:', (string) $divLabel1);//PROBLEM, mam totiz 1. label v celem dokumentu (Email:)
Assert::same('form-control', (string) $divInput1->attributes()["class"]);//OK
}
Je možné volat nekolikrat po sobe pres metodu find()?
$div1 = $dom->find('div')[1];//najdi prvni div, to je OK
$divLabel1 = $div1->find('label')[0];//PROBLEM najde 1. label v celem formulari a ne pouze v pozadovanem DIVu
Dělám něco špatně, nebo jsem to nepochopil? Díky
Editoval motorcb (1. 9. 2017 11:45)
- rkor
- Člen | 62
Takhle by to šlo?
$label0 = $dom->find('div label')[0];
$input0 = $dom->find('div input')[0];
$label1 = $dom->find('div label')[1];
$input1 = $dom->find('div input')[1];
Vlastně v tomhle případě by mělo stačit
$label0 = $dom->find('label')[0];
$input0 = $dom->find('input')[0];
$label1 = $dom->find('label')[1];
$input1 = $dom->find('input')[1];
Editoval rkor (1. 9. 2017 13:42)