0
我想用Behat測試一個select2 dropbox,它可以調用ajax來獲得結果。 問題是,在填充select2的搜索框後,立即關閉下拉菜單,因此搜索沒有發生。Behat select2 ajax關閉搜索框
如果選擇已填充(正常的下拉與預定義的值)一切正常,因爲所有的數據是存在的,它需要它的時候了。
我使用Behat Page object
爲我的項目,所以這裏是我的方法:
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;
}
在$select2Input->setValue()
搜索框會填充值,但搜索不會發生,因爲該下拉列表會立即關閉。
所以現在的問題是:有沒有辦法迫使框,直到結果顯示(Ajax調用完成後)保持開放?
選擇應該像手動一樣工作,您可能需要模擬鍵入(鍵盤按下)而不是設置值。您也許希望有一個方法來查找元素並返回找到的對象或拋出異常而不是在每個元素/操作所需的方法中處理此操作。 – lauda
好吧,我設法使用'select2('search','key')進行搜索'但現在我被困在如何點擊突出顯示的值... –