2017-02-20 3 views
1

Я пытаюсь нажать одну галочку в нг-ретранслятора в транспортир для следующих HTMLОшибка нажав флажок в транспортира

enter image description here

код я использую;

element.all(by.repeater('user in siteUsers | filter: { SiteId: site.SiteId }')) 
      .then(function (ElementArray) { 
       ElementArray[0].all(by.tagName('input')).get(0).click(); 
      }).catch((err) => { 
       console.log(err); 
      }); 

Но я получаю следующее сообщение об ошибке:

TypeError: Cannot read property 'all' of undefined 
    at C:\AGLRepository\Agl.Digital.SolarCommand.WebApi\e2eTests\src\components\settings\addRemoveUsers\addRemoveUsers.page.ts:87:32 
    at ManagedPromise.invokeCallback_ (C:\Users\MyDevMachine\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1379:14) 
    at TaskQueue.execute_ (C:\Users\MyDevMachine\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2913:14) 
    at TaskQueue.executeNext_ (C:\Users\MyDevMachine\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2896:21) 

Далее я упомянул следующую ссылку решения, а также. Не повезло.

Заранее спасибо.

enter link description here

ответ

0

Вы используете .all() неправильно. Извлекает ниже выписку из официальной документации

element.all(locator).all(locator) View code ElementArrayFinder.prototype.all

Calls to ElementArrayFinder may be chained to find an array of elements using the current elements in this ElementArrayFinder as the starting point. This function returns a new ElementArrayFinder which would contain the children elements found (and could also be empty).

Вы используете это - ElementArray[0].all(by.tagName('input')).get(0).click() Правильное использование - ElementArray.all(by.tagName('input')).get(0).click()

и дополнительная информация о лучших практиках. Вам не нужно разрешать обещание element.all(). Вы можете сделать что-то вроде ниже

element.all(by.repeater('blah in blahs')).all(by.tagName('input')).get(0).click()

+1

'ElementArray [0] .Все (by.tagName ('ввода')). Получим (0) .click()' должен работать нормально. Проблема здесь в том, что элемент не сохраняется для локатора 'by.repeater ('user in siteUsers | filter: {SiteId: site.SiteId}')' .So ElementArray будет пустым, а ElementArray [0] не будет определено. Может быть, некоторое ожидание решит проблему. –

+0

@AdityaReddy Я пробовал этот код 'element.all (by.repeater ('user in siteUsers | filter: {SiteId: site.SiteId}')). All (by.tagName ('input')). Get (0) .click(); 'Тогда я получил ошибку, которая' Failed: Index out of bound. Попытка доступа к элементу по индексу: 0, но есть только 0 элементов, которые соответствуют локатору By (css selector, input) 'В пользовательском интерфейсе я могу видеть этот флажок, но не событие click. Это может быть причиной Wgat? – SMPH

+0

@Sudharsan Selvaraj, я применил 'browser.wait (() => 1000); 'перед кодом. Не помогло. – SMPH

Смежные вопросы