Ich möchte mit Behat eine select2 Dropbox testen, die einen Ajax-Aufruf macht, um die Ergebnisse zu erhalten. Das Problem ist, dass unmittelbar nachdem ich das Suchfeld von select2 bevölkert habe, das Dropdown sofort geschlossen wird, so dass die Suche nicht stattfindet.Behat select2 ajax schließt das Suchfeld
Wenn die Auswahl bereits ausgefüllt ist (ein normales Dropdown mit vordefinierten Werten), ist alles in Ordnung, da alle Daten vorhanden sind und sie sofort übernommen werden.
Ich Behat Page object
für mein Projekt mit so hier ist meine Methode:
select2FieldPopulate
public function select2FieldPopulate($field, $value)
{
$select2Field = $this->find('css', '.'.$field);
//check if select2Field exists
if (!$select2Field) {
throw new \Exception(sprintf("Field %s was not found", $field));
}
$select2Field->click();
$select2Input = $this->find('css', '.select2-drop.select2-drop-active .select2-search input.select2-input');
if (!$select2Input) {
throw new \Exception(sprintf("Field %s was not found", "select2-input"));
}
$select2Input->setValue($value);
}
js
function buildSelect2Element(selector, placeholder, url) {
var element = $(selector).select2({
placeholder: placeholder,
minimumInputLength: 3,
ajax: {
url: url,
dataType: 'json',
data: function (term) {
return {
q: term
}
},
results: function (data) {
//workarround to fix select2
var results = [];
$.each(data, function (index, item) {
results.push({
id: item.id,
text: item.name
});
});
return {
results
}
}
}
});
return element;
}
Unter $select2Input->setValue()
wird das Suchfeld mit dem Wert gefüllt, aber die Suche wird nicht ausgeführt, da das Dropdown-Menü sofort geschlossen wird.
Die Frage ist also: Gibt es eine Möglichkeit, die Box zu zwingen, offen zu bleiben, bis die Ergebnisse angezeigt werden (der Ajax-Aufruf ist beendet)?
Die Auswahl sollte sich wie manuell verhalten und Sie müssen möglicherweise Eingabe simulieren (Tastatur drücken), anstatt den Wert festzulegen. Auch möchten Sie möglicherweise eine einzige Methode, um das Element zu finden und das Objekt zurückgeben, wenn gefunden oder Ausnahme auslösen anstatt dies in der Methode zu behandeln, die Sie für jedes Element/Aktion benötigen. – lauda
ok, ich habe es geschafft, die Suche mit 'select2 ('search', 'key')' zu machen, aber jetzt stehe ich fest, wie man auf den hervorgehobenen Wert klickt ... –