2013-08-23 2 views
16

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

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')); 
    }); 
}); 

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

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

+0

Никто в этой теме не ответил на вопрос, заданный оп - даже оп в их ответе! * Все * ответы downvoted. – 7stud

+0

@ 7stud Если вы посмотрите на ответ, отправленный самим собой, вы узнаете, что он хочет знать, на самом деле отличается от вопроса, который он опубликовал. Он спрашивает, как получить выбранное значение из раскрывающегося списка, в то время как его ответ заключается в том, как выбрать один из вариантов из раскрывающегося списка, щелкнув по нему. Он не знает, чего хочет. – zsong

+0

Я думаю, что я не знал, что хочу, совсем не полезно. Если вы не можете предложить конструктивный ответ на этот вопрос, пожалуйста, не отвечайте и не комментируйте. Это не помогает сообществу критиковать только своих членов. Я не смог указать значение опции выбора в ответе, однако код показывает, что было предназначено. –

ответ

4

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

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

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

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

В более ранних версиях 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 работал только с моделью искателем.

+0

спасибо за то, что поделились своей исследовательской информацией с нами! – Voles

+0

Но как вы получаете значение свойства «значение»? Я попробовал getCssValue («значение»), но это не сработало для меня. – Machtyn

+0

Спасибо. Для меня был для меня «ключ выбора: проверен». Я ранее пробовал параметр «option: selected» безрезультатно, хотя он возвращал правильные элементы в моей консоли Chrome. –

0

Попробуйте использовать 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(); 
+3

проблема с использованием xpath заключается в том, что пути могут измениться по мере развития разработки, что делает тесты хрупкими и подверженными сбоям. использование css также может иметь такой же эффект. Использование тегов id - лучшее решение, если команда разработчиков понимает, что изменения в них не требуются, поскольку некоторым разработчикам интерфейса не нравятся теги идентификаторов или как рекомендует PaulL. –

-1

Чтобы перечислить теги параметров, вы можете попробовать использовать метод .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

Edit: также следовать стиль руководства, который отпугивает использование XPath http://www.protractortest.org/#/style-guide

0

Вот как вы можете получить значение опции в a 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");       

    }); 

}); 

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

expect(
     element( 
     by.model('model') //'model' is the string assigned to the select's ng-model attribute         
    ).element(     
      by.css('option:checked') 
     ).getAttribute('value') 
    ).toEqual('Swizerland'); 
Смежные вопросы