Ниже приведен мой HTML-код для текстового поля. В protractor element.all(by.model('phoneNumber.areaCode')) возвращает мне счет из двух, который является истинным. Но мне нужно проверить, присутствует ли каждое текстовое поле или нет. так как я могу сделать, чтобы итерации и проверять один за другим, чтобы увидеть, присутствует ли этот элемент или нет.
Plz помогите мне в этом вопросе.
Примечание. Я просто хочу пойти только с помощью локатора модели, а не с помощью какого-либо другого локатора
Мой Html ниже
<input disabled="disabled" required="required" class="ng-pristine ng-untouched ng-invalid ng-invalid-required ng-valid-pattern ng-valid-maxlength" digit3="" ng-pattern="/^[0-9]{3}$/" name="areaCode" ng-model="phoneNumber.areaCode" maxlength="3" no-validation-on-focus="" ng-change="inputValidate('areaCode')" ng-disabled="disable" ng-required="required" id="areaCode" type="text">
На самом деле комбинация двух существующих ответов - each()
и expect()
+ isDisplayed()
- наиболее распространенный способ проверки видимости каждого элемента в массиве:
var areaCodes = element.all(by.model('phoneNumber.areaCode'));
areaCodes.each(function (areaCode) {
expect(areaCode.isDisplayed()).toBe(true);
});
Вы также можете reduce()
отображение нескольких элементов в одном логическом значении и сделать ожидание один раз:
var areaCodes = element.all(by.model('phoneNumber.areaCode'));
var areAllDisplayed = areaCodes.reduce(function (acc, areaCode) {
return areaCode.isDisplayed().then(function (isDisplayed) {
return isDisplayed && acc;
});
}, true);
expect(areAllDisplayed).toBe(true);
Также обратите внимание, что вы можете вызвать isDisplayed()
в массиве элементов, который будет обещанием, которое разрешается в массив логических элементов:
var areaCodes = element.all(by.model('phoneNumber.areaCode'));
expect(areaCodes.isDisplayed()).toEqual([true, true, true]);
Все это предполагает, что вы были на самом деле предназначены для проверки видимости, а не для присутствия, как в вашем исходном состоянии вопроса.
когда вы решаете метод element.all(), он возвращает массив массивов элементов в качестве результата. Затем вы можете выполнить итерацию по массиву и проверить, присутствуют ли все элементы. Попробуйте приведенный ниже код.
element.all(by.model('phoneNumber.areaCode')).then(function(arrayOfElement){
for(i=0;i<arrayOfElement.length;i++){
expect(arrayOfElement[i].isDisplayed()).toBeTruthy();
}
})
Для того, чтобы перебирать, вы должны применять каждый() метод на element.all(). Внутри цикла вы можете использовать protractor.ExpectedConditions для проверки видимости каждого элемента в цикле. Вы можете следовать приведенному ниже коду:
Фрагмент кода:
var EC=protractor.ExpectedConditions;
element.all( by.model('phoneNumber.areaCode')).each(function(eachInputField,
index){
expect(EC.visibilityOf(eachInputField).call()).toBe(true,'element at
index'+index+' is not visible');
});