2015-06-22 2 views
0

У меня есть список фильтров (multi-selection) и панель инструментов, чтобы показать все элементы. В первый раз на панели приборов будут показаны все элементы, а затем я выберу элементы в списке фильтров, панель инструментов покажет только элементы в списке фильтров.Транспортер не может захватить элементы

Так что мое тестирование сравнивает нет. элемента в списке фильтров должны равняться без. элемента на приборной панели.

Но приборная панель будет перезагружаться автоматически каждые 3 секунды, проблема заключается в том, что Protractor не может своевременно подсчитывать элементы на приборной панели и отображать ошибку, которая не равна.

Можно ли заставить Транспортировать моментальные снимки всех элементов, которые отображаются в один момент времени, чтобы использовать их для сравнения?

Моя заявка была закодирована AngularJS.

Ниже часть кода для тестирования

it('show all visibled element', function(){ 
    browser.get('http://localhost:8080/dashboard/'); 
    browser.ignoreSynchronization = true; 

    // Delay browser 
    // Refer link : http://stackoverflow.com/questions/24960290/can-protractor-be-made-to-run-slowly 
    var delayLoad = browser.driver.controlFlow().execute; 

    browser.driver.controlFlow().execute = function() { 
     var args = arguments; 

     delayLoad.call(browser.driver.controlFlow(), function() { 
      // delay 500 ms for dashboard renders all items 
      return protractor.promise.delayed(500); 
     }); 

     return delayLoad.apply(browser.driver.controlFlow(), args); 
    }; 

    var filter_expand = element(by.css('body > main > div > aside.aside.filter-bar.filters-closed > span')); 
    //browser.actions().mouseMove(filter_expand) 
    browser.actions().mouseMove(filter_expand).click().perform() 
     .then(function(){ 
      var item_filter = element(by.css('body > main > div > aside.aside.filter-bar.filters-open > ng-include > div > nav > ul:nth-child(1) > li.filter-load > input:nth-child(3)')); 

      item_filter.click().then(function(){ 
       var item_count = element(by.css('#s2id_autogen3 > ul')).all(by.css('li')); 
       var dashboard_count = element(by.css('div.dashboard > main > ul')).all(by.css('li')); 

       expect(item_count.count()).toEqual(dashboard_count.count()); 
      }); 
     }); 
}) 

ответ

0

Мой обходной путь, я указать путь элемента (CSS) и вызовите функцию повторами, чтобы найти элемент, пока не нашел его.

См: http://darrellgrainger.blogspot.sg/2012/06/staleelementexception.html

А ниже мой код

function waitElement(elm,val){ 
     element(by.css(elm)).getText().then(function(txt){ 
      console.log(err_num); 
      expect(txt).toEqual(val); 
     }, function(err){ 
      if (err_num < 5) { 
       err_num ++; 
       waitElement(elm,val); 
      } 
     }); 
    } 

    err_num = 0; 
    waitElement('body > main > div > ng-view > div > main > ul > li:nth-child(1) > p.body-large.ng-binding','Found it');