Я пытаюсь выбрать вариант из раскрывающегося списка для тестов angular e2e с помощью транспортира.
Вот фрагмент кода опции выбора:
<select id="locregion" class="create_select ng-pristine ng-invalid ng-invalid-required" required="" ng-disabled="organization.id !== undefined" ng-options="o.id as o.name for o in organizations" ng-model="organization.parent_id">
<option value="?" selected="selected"></option>
<option value="0">Ranjans Mobile Testing</option>
<option value="1">BeaverBox Testing</option>
<option value="2">BadgerBox</option>
<option value="3">CritterCase</option>
<option value="4">BoxLox</option>
<option value="5">BooBoBum</option>
</select>
Я пытался:
ptor.findElement(protractor.By.css('select option:1')).click();
Это дает мне следующую ошибку:
Указана неверная или недопустимая строка Информация о сборке: версия: '2.35.0', редакция: 'c916b9d', время: '2013-08-12 15:42:01' Информация о системе: os.name: 'Mac OS X' , os.arch: 'x86_64', os.version: '10 .9 ', java.version:' 1.6.0_65 'Информация о драйвере: driver.version: unknown
Я также пробовал:
ptor.findElement(protractor.By.xpath('/html/body/div[2]/div/div[4]/div/div/div/div[3]/ng-include/div/div[2]/div/div/organization-form/form/div[2]/select/option[3]')).click();
Это дает мне следующую ошибку:
ElementNotVisibleError: элемент в настоящее время не отображается и поэтому не может взаимодействовать с командой. Продолжительность или время ожидания: 9 миллисекунд. Информация о сборке: версия: '2.35.0', редакция: 'c916b9d', время: '2013-08-12 15:42: 01 'Системная информация: os.name:' Mac OS X ', os.arch:' x86_64 ', os.version: '10 .9', java.version: '1.6.0_65' Идентификатор сеанса: bdeb8088-d8ad-0f49-aad9 -82201c45c63f Информация о драйвере: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{платформа = MAC, acceptSslCerts = true, javascriptEnabled = true, browserName = firefox, rotatable = false, locationContextEnabled = true, version = 24.0, cssnabledSelectors = true, handlesAlerts = true, browserConnectionEnabled = true, nativeEvents = false, webStorageEnabled = true, applicationCacheEnabled = false, playsScreenshot = true}]
Может ли кто-нибудь помочь мне с этой проблемой или пролить свет на то, что я здесь делаю неправильно.
источник
Для меня сработало как шарм
Надеюсь, поможет.
источник
ElementFinder
умеетelement(by.css('.specific-select')).element(by.cssContainingText('option', 'BeaverBox Testing')).click();
Элегантный подход предполагает создание абстракции, подобной тому, что другие привязки языка селена предлагают из коробки (например,
Select
класс в Python или Java).Сделаем удобную обертку и спрячем детали реализации внутри:
Пример использования (обратите внимание, насколько он читабелен и прост в использовании):
Решение взято из следующей темы: Select -> option abstraction .
FYI, создал запрос функции: Select -> option abstraction .
источник
click()
. Спасибо.источник
Для доступа к определенной опции вам необходимо предоставить селектор nth-child ():
источник
Вот как я сделал свой выбор.
источник
Вот как я это сделал:
источник
waitForAngular()
метод транспортира.Попробуйте это, у меня это работает:
источник
Вы можете попробовать, надеюсь, это сработает
источник
Другой способ установить элемент option:
источник
Чтобы выбрать элементы (параметры) с уникальными идентификаторами, как здесь:
Я использую это:
источник
Мы написали библиотеку, в которой есть 3 способа выбора варианта:
Дополнительная особенность этих функций заключается в том, что они ожидают отображения элемента перед выполнением каких-либо действий с
select
ним.Вы можете найти его на npm @ hetznercloud / protractor-test-helper . Также предусмотрены типы для TypeScript.
источник
Может быть, не супер элегантно, но эффективно:
Это просто отправляет ключ для выбора, который вы хотите, в нашем случае мы используем modelSelector, но, очевидно, вы можете использовать любой другой селектор.
Затем в моей объектной модели страницы:
И из теста:
источник
Проблема в том, что решения, которые работают с обычными угловыми полями выбора, не работают с угловым материалом md-select и md-option с использованием транспортира. Этот был опубликован другим, но у меня это сработало, и я пока не могу комментировать его пост (всего 23 очка репутации). Также немного подчистил, вместо browser.sleep использовал browser.waitForAngular ();
источник
element(by.model('selectModel')).click(); element(by.css('md-option[value="searchOptionValue"]')).click();
mdSelectElement.getAttribute('aria-owns').then( function(val) { let selectMenuContainer = element(by.id(val)); selectMenuContainer.element(by.css('md-option[value="foo"]')).click(); } );
Есть проблема с выбором опций в Firefox, которую исправляет взлом Droogans , и я хочу упомянуть здесь явно, надеясь, что это может кому-то избавить от некоторых проблем: https://github.com/angular/protractor/issues/480 .
Даже если ваши тесты проходят локально в Firefox, вы можете обнаружить, что они не работают на CircleCI или TravisCI или на том, что вы используете для CI и развертывания. Зная об этой проблеме с самого начала, я сэкономил бы много времени :)
источник
Помощник для установки элемента option:
источник
Если ниже приведен раскрывающийся список -
Тогда код protractorjs может быть:
Источник - https://github.com/angular/protractor/issues/600
источник
Выберите вариант по индексу:
источник
Я немного улучшил решение, написанное PaulL. Прежде всего, я исправил код, чтобы он был совместим с последней версией Protractor API. А затем я объявляю функцию в разделе onPrepare файла конфигурации Protractor как член экземпляра браузера , чтобы на нее можно было ссылаться из любой спецификации e2e.
источник
Я рылся в сети в поисках ответа о том, как выбрать вариант в раскрывающемся списке модели, и я использовал эту комбинацию, которая помогла мне с материалом Angular.
похоже, что при выводе кода в одну строку он мог найти элемент в раскрывающемся списке.
На это решение ушло много времени, надеюсь, это кому-то поможет.
источник
Мы хотели использовать элегантное решение с использованием материала angularjs, но оно не сработало, потому что на самом деле в DOM нет тегов option / md-option до тех пор, пока не будет нажата кнопка md-select. Так что "элегантный" способ не сработал для нас (обратите внимание на угловатый материал!) Вот что мы для него сделали, не знаю, лучший ли это способ, но теперь он определенно работает.
Нам нужно было выбрать 4 выбора, и пока выбор открыт, есть оверлей на пути выбора следующего выбора. вот почему нам нужно подождать 500 мс, чтобы убедиться, что у нас не будет проблем с материальными эффектами, которые все еще действуют.
источник
Другой способ установить элемент option:
источник
источник
Вы можете выбрать варианты раскрывающегося списка по значению:
$('#locregion').$('[value="1"]').click();
источник
Вот как это сделать с помощью значения параметра или индекса . Этот пример немного грубоват, но он показывает, как делать то, что вы хотите:
HTML:
TS:
источник
источник
Мы можем создать для этого собственный класс DropDown и добавить метод как:
Кроме того, чтобы проверить, какое значение выбрано в данный момент, мы можем иметь:
источник
Пример ниже - самый простой способ. Я протестировал и прошел версию Protractor.
5.4.2
Полный код
источник
Это простой однострочный ответ, в котором у angular есть специальный локатор, который может помочь выбрать и индексировать из списка.
источник
Выберите вариант по свойству CSS
или
Где locregion (id), organization.parent_id (имя модели) - это атрибуты элемента select.
источник