Как получить значение параметра выбранного элемента

Я пытаюсь получить значение параметра элемента select с помощью Protractor. Однако я не могу найти элемент option.

HTML

<select ng-options="opions.c as options.n for option in options" ng-model="model">
    <option value="0">Option 1</option>
    <option value="1">Option 2</option>
</select>

Spec файл

describe('testing select option', function() {
    it('', function() {
        ptor = protractor.getInstance();

        //This will not get the option required
        ptor.findElement(protractor.By.binding('model'));
    });
});

Я не могу найти способ захватить значение параметра, так как я не нашел функцию, которую я могу использовать, которая не дает и исключение или сообщение об ошибке.

Кто-нибудь знает, как решить эту проблему?

Ответы

Ответ 1

ok снова Теперь я смог выяснить, как захватить элемент option с помощью транспортира.

приведенный ниже пример кода показывает, как это сделать.

ptor.findElement(protractor.By.css('select option:nth-child(value of the option you require IE: the number)')).click();

Ответ 2

У меня возникли проблемы с тем, что выпадающие списки работают хорошо, и потратили некоторое время на его работу (и поэтому я делюсь им здесь, если кто-то считает это полезным).

В более ранних версиях Protractor был by.selectedOption, который фактически выполняет то же самое, что и by.select, но возвращает только выбранный элемент. Итак, чтобы получить текст выбранного варианта выше, вы могли бы:

expect(element(by.selectedOption('model')).getText()).toEqual('Option 1');

Я написал сообщение в блоге, если вы хотите более подробно, он также включает вспомогательную функцию для выбора опции в раскрывающемся списке: http://technpol.wordpress.com/2013/12/01/protractor-and-dropdowns-validation/

Последние версии транспортира удалили эту функцию, заменив ее на:

expect(element(by.id('my_id')).element(by.css('option:checked')).getText();

Что более гибко, так как оно может применяться к любому из поисковых устройств, тогда как selectedOption работает только с поиском модели.

Ответ 3

Попробуйте использовать xPath:

ptor.findElement(protractor.By.xpath('//select/option[1]'));

Вы можете использовать ту же технику, чтобы выбрать опцию по значению:

protractor.By.xpath('//select/option[text()="Option 2"]'));

Мне нужно было сделать это для настройки форм, где входы видны на основе выбранных выпадающих меню, например:

makeFord = protractor.By.xpath('//select[@id="make"]/option[text()="Ford"]'));
modelMustang = protractor.By.xpath('//select[@id="model"]/option[text()="Mustang"]'));
makeFord.click();
modelMustang.click();

Ответ 4

Вот как вы можете получить значение опции в select:

HTML

<select ng-options="opions.c as options.n for option in options" ng-model="model">
    <option value="Africa">Option 1</option>
    <option value="Switzerland">Option 2</option>
</select>

.spec

describe("Country <select>", function() {

  it("should have 'Africa' as the value of the first option", function() {

    browser.get('index.html');

    let all_options = element.all(
      by.options("opions.c as options.n for option in options") //use whatever string is assigned to the ng-options attribute in the html
    );

    let first_option = all_options.get(0);  //or all_options.first()
    let second_option = all_options.get(1); //or all_options.last()

    expect(
      first_option.getAttribute('value')
    ).toEqual("Africa");                           

  });

});

Чтобы получить значение выбранного параметра (который может быть опцией, программно выбранной с помощью транспортира, вызывая функцию click() для опции):

    expect(
      element(    
        by.model('model') //'model' is the string assigned to the select ng-model attribute                                
      ).element(                  
          by.css('option:checked') 
        ).getAttribute('value')
    ).toEqual('Swizerland');

Ответ 5

Чтобы перечислить теги опций, вы можете попробовать использовать метод .all, и сначала вы должны получить к нему доступ родительским.

element(by.model('model')).all(by.tagName('option')).then(function(arr) {
        expect(arr.length).toEqual(2);
});

Взгляните на ссылку API для вдохновения

http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.all

Изменить: также следовать руководству по стилю, которое препятствует использованию XPath http://www.protractortest.org/#/style-guide