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
+
0
-

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
+
0
-

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)