Ошибка при выборе параметра переключателя с использованием транспортира и огурца.

Я новичок в мире автоматизации тестов на угловых страницах. Фреймворк, который я использую, это транспортир, но я использую его с огурцами.

Я пытаюсь нажать на радиокнопку. Вот как элемент выглядит в DOM:

<div>
<input class="ng-pristine ng-untouched ng-valid" type="radio" ng-click="setTestOrValid(p)" value="Valid" ng-model="p.testOrValidDisplay" name="341">
Valid
<input class="ng-pristine ng-untouched ng-valid" type="radio" ng-click="setTestOrValid(p)" value="Invalid" ng-model="p.testOrValidDisplay" name="342">
Invalid (Test/Junk)
</div>

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

sut.browser.findElements(sut.by.css('[ng-click="setTestOrValid(p)"]')).then(function(elements){
  for (i=0; i < elements.length; i++){
    elements[i].getAttribute('value').then(function(value){
      if (value == 'Invalid') {
        elements[i].click();
      }
    })
  }
});

Приведенный выше код выдает ошибку: -

 TypeError: Cannot read property 'click' of undefined

Не могли бы вы помочь мне с этим?


person Karishma    schedule 16.02.2016    source источник


Ответы (1)


Вы можете добраться до своего элемента за один раз, используя селектор CSS:

var elm = $("input[type=radio][value=Invalid]");
elm.click();

Или вы можете отфильтровать все переключатели по модели и filter(). :

var elm = element.all(by.model("p.testOrValidDisplay")).filter(function(elm) {
    return elm.getAttribute("value").then(function (value) {
        return value === "Invalid";
    });
}).first();
elm.click();
person alecxe    schedule 16.02.2016
comment
Спасибо алексе! 1. Поскольку я использую не жасмин, а огурец, вот как это сработало для меня: - var elm = sut.browser.findElement(sut.by.css(input[type=radio][value=Invalid])); Вяз.щелчок(); Как вы придумали этот css, есть ли какой-нибудь ресурс, который я могу использовать для улучшения своих навыков? - person Karishma; 17.02.2016
comment
2. Другой предложенный вами метод фильтрации не работает для меня. Вот как я его изменил: var els = sut.browser.findElements(sut.by.css('[ng-click=setTestOrValid(p)]')); els.filter(function(elements){ return elements.getAttribute('value').then(function(value){ return value == 'Invalid'; }); }).click(); Когда я запускаю это, это дает мне следующую ошибку: - TypeError: sut.browser.findElements(...).filter не является функцией. Что мне не хватает? - person Karishma; 17.02.2016
comment
3. Если я использую element.all (даже $ в этом отношении) вместо findElements, я получаю сообщение об ошибке: - ReferenceError: элемент не определен. Как мне получить доступ к глобальным объектам транспортира при использовании огурца js? - person Karishma; 17.02.2016
comment
@Karishma 1. Это только что пришло из опыта, проверка атрибутов проста в селекторах CSS: [attr="value"] и вы можете опустить кавычки, если значение атрибута буквенно-цифровое. 2. Да, filter() зависит от транспортира, filter() для обычных результатов findElements нет. 3. Извините, раньше не пользовались транспортиром и огурцом. Спасибо! - person alecxe; 17.02.2016
comment
@Karishma, давайте не будем решать последующие проблемы в комментариях. Если у вас есть дополнительный вопрос, и вы не можете решить его самостоятельно, рассмотрите возможность создания нового вопроса stackoverflow. Спасибо! - person alecxe; 23.02.2016