Как выбрать опцию в поле выбора в тесте транспортира?

Я использую Protractor для сквозного тестирования в приложении Angular. Я пытаюсь выбрать опцию в поле выбора, но у меня появляется следующая ошибка: Элемент в настоящее время не отображается и не может быть изменен.

У меня есть эта часть html:

<select class="form-control" ng-required="true" ng-model="selectedAction.begStatus"
        ng-options="obj as obj.name for obj in allBegStatuses">
</select>

И у меня есть эта строка кода в тесте транспортира:

element(by.xpath('//select/option[text()="Draft"]')).click();

Я хочу щелкнуть по опции со значением «Черновик». Вы знаете, может, в чем проблема?


person Dejan Jankovic    schedule 20.05.2014    source источник
comment
почему вы не хотите выбирать элемент по модели?   -  person Stepan Suvorov    schedule 20.05.2014
comment
Вам следует использовать локатор опций. Например: element.all(by.options('obj as obj.name for obj in allBegStatuses')); Эта ссылка может показать вам, как применить фильтр в список опций.   -  person flaviomeira10    schedule 02.11.2015


Ответы (4)


Я сделал функцию для выбора (по идентификатору) и щелкнул опцию по сравнению текста.

this.selectOption = function (selector, item) {
        var selectList, desiredOption;
        selectList = element(by.id(selector));
        selectList.all(protractor.By.tagName('option'))
            .then(function (options) {
                options.some(function (option) {
                    option.getText().then(function (text) {
                        if (item.toLowerCase() === text.toLowerCase()) {
                            desiredOption = option;
                            return true;
                        }
                        return true;
                    });
                });
            })
            .then(function () {
                if (desiredOption) {
                    desiredOption.click();
                }
            });
    };

надеюсь, это сработает для вас

person Hans Poppe    schedule 10.02.2015

Как насчет этого:

element(by.xpath('//*[@id="controlId"]/option[3]')).click();

Это должно выбрать значение в раскрывающемся списке.

Надеюсь, это поможет.

person Sandy    schedule 05.03.2015
comment
Что, если «Черновик» станет option[4]? - person Dmitri Zaitsev; 27.04.2015
comment
из ВСЕХ подробных и громоздких ответов в сети ЭТО - решение! Спасибо - person Coldstar; 24.08.2015

выбрать по модели:

element(by.select("selectedAction.begStatus"))
person Stepan Suvorov    schedule 20.05.2014
comment
Я могу это сделать, но как я могу указать конкретное значение параметра, для которого нужно щелкнуть? Потому что я хочу выбрать вариант со значением = Только черновик. - person Dejan Jankovic; 20.05.2014
comment
возможно, это поможет stackoverflow.com/questions/19599450/ - person Stepan Suvorov; 20.05.2014
comment
Спасибо за ссылку, но я уже пробовал решения с этой страницы, и они не помогли мне. Не знаю, есть ли возможность иметь несколько условий в одном выражении, например иметь: элемент по модели и xpath в одном выражении? - person Dejan Jankovic; 20.05.2014

Это сработало для меня:

    function selectOptionByText (selectBox, optionText) {
        selectBox.element(by.cssContainingText('option', optionText)).click();
    }
person user1910484    schedule 18.02.2015