Behat select2 ajax 关闭搜索框

Behat select2 ajax closes the search box

我想用 Behat 测试一个 select2 投递箱,它发出 ajax 调用以获得结果。 问题是,在我填充 select2 的搜索框后,下拉列表会立即关闭,因此不会进行搜索。

如果 select 已经填充(带有预定义值的正常下拉列表)一切正常,因为所有数据都在那里并且它会立即获取。

我正在为我的项目使用 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 调用完成)?

我设法让它在 select2 v4.x.

下工作

我在关闭时向 js 添加了 select 的选项,如下所示:

js

function buildSelect2Element(selector, placeholder, url) {
    var element = $(selector).select2({
        theme: "classic",
        placeholder: placeholder,
        minimumInputLength: 3,
        selectOnClose: true, //HERE

然后在我的测试中我使用了 evaluateScript 方法:

select2FieldPopulate method

$this->getDriver()->evaluateScript("$('#your_select2_element').select2('open')");
$this->getDriver()->evaluateScript("$('.select2-search__field').val('". $value ."').keyup();");
$this->getDriver()->evaluateScript("$('#your_select2_element').select2('close')");