Hat jemand Vorschläge, was mit meinem Code falsch ist? Hier ist der Code:Behat kann nicht mit unsichtbarem Feld interagieren
echo $this->find("css","#address-container")->getHtml();
$field = $this->find("css","#address-container .region input");
echo $field->isVisible() ? "I can see myself!!!" : "no can not see";
echo $field->getAttribute('type');
$field->setValue("ON");
Wenn ich den Test ausführen, das ist das Ergebnis
│ <legend>Address</legend>
│ <div class="field city">
│ <label>*City</label>
│ <input class="required city" name="address_add[0][city]" value="" type="text">
│ </div>
│ <div class="field region">
│ <label>*Prov./State</label>
│ <input class="required region" name="address_add[0][region]" value="" type="text">
│ </div>
│ <div class="field country">
│ <label>*Country</label>
│ <input class="required country" name="address_add[0][country]" value="" type="text">
│ </div>
│ no can not seetext
Element is not currently visible and so may not be interacted with
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'ubuntu', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.15-x86_64-linode81', java.version: '1.8.0_121'
Driver info: driver.version: unknown (WebDriver\Exception\ElementNotVisible)
Ich erwarte die #address-container .region input
sichtbar zu sein. Wenn ich zu meinem Browser gehe und die Schritte manuell durchführe, sehe ich, dass das Regionsfeld sichtbar ist. Andere Dinge, die ich geprüft sind:
- gibt es keine andere Region Eingabefelder auf der Seite
- wenn ich Region mit Stadt und Land ersetzen, funktioniert alles einwandfrei
- gibt es keine JavaScript-Aufruf verzögert, um die Region zu manipulieren Eingabefeld
Was könnte sonst dazu führen, dass das Gebietsfeld ausgeblendet wird? Gibt es bessere Tools, mit denen ich dieses Problem beheben kann?
UPDATE
Wenn ich die Position der Region und Land html wie folgt getauscht:
│ <div class="field country">
│ <label>*Country</label>
│ <input class="required country" name="address_add[0][country]" value="" type="text">
│ </div>
│ <div class="field region">
│ <label>*Prov./State</label>
│ <input class="required region" name="address_add[0][region]" value="" type="text">
│ </div>
Dann wird Region sichtbar. Aber wenn ich meinen Behath-Code ändere, um nach Land zu suchen, ist das Land unsichtbar!
Ist es etwas anderes, dass ich in einem REAL Browser nicht sehe?
Versuchen Sie, diesen Selektor über inspect im Browser zu durchsuchen, um festzustellen, ob ein einzelnes Element zurückgegeben wird. Sie müssen möglicherweise eine Wartezeit hinzufügen, zunächst können Sie eine blinde Wartezeit wie "sleep (2);" verwenden, um zu testen, und nachdem Sie eine bedingte Wartezeit hinzufügen können. Bitte geben Sie das HTML-Snippet des gesamten # Adresscontainers an. – lauda
Danke Lauda. Ich habe gerade meine Frage aktualisiert. Wenn ich die Reihenfolge der HTML-Knoten für Region und Land umkehre, dann ist die Region sichtbar und das Land nicht. Auch wenn ich Dinge in meinem Webbrowser durch menschliche Augen betrachte, kann ich sehen, dass beide sichtbar sind ... komisch – John
Versuchen Sie einen Selektor wie: '# address-container input.region' oder' # address-container input [name * = Region] ' – lauda