3

Вопрос: Как я могу щелкнуть по каждой ссылке в ul > li a из одного теста?Испытания на затяжку протравителей с использованием For-Loops

Задача: этот тест проходит; однако он не нажимает на ссылки. Я знаю это потому, что он не перенаправляет или не ждет 2000 мс.

Тест:

it("should have proper page linking to all footer link", function() { 
     browser.driver.sleep(2000); 
     browser.ignoreSynchronization = true; 
     //creates an array of strings of all the menu items 
     var titles = element.all(by.css('.leftMenu.first .submenu li a')) 
      .map(function(elm) { 
       return elm.getText().then(function(text){ 
       return text; 
       }); 
      }); 

     //iterates through the links via titles array 
     for (var i = 0; i < titles.length; i++) { 
      // creates a link via selection of cssContainText of the titles array 
      var link = element(by.cssContainingText('.submenu li a', titles[i])); 

      //click event 
      link.click().then(function() { 
       browser.driver.sleep(2000); 
       //currently arbitrary expectation but will pass 
       expect(browser.driver.getTitle()).toBe('welcome to: ' + title[i]); 
      }); 

     } 

    }); 

UPDATE: Нашел ответ: ANSWER

+0

возможно дубликат [Looping на тесте транспортир с параметрами] (http://stackoverflow.com/questions/21634558/looping-on-a-protractor-test-with-parameters) –

+1

рад, что вы решил это. Спасибо, что поделились решением. – alecxe

+0

@alecxe Как ваши навыки с модульным тестированием в угловом/жасмине/карме? http://stackoverflow.com/questions/27264016/how-to-test-a-directives-controller-using-angularjs-karma-jasmine –

ответ

1

Ваша главная проблема заключается в:

return elm.getText; 

GetText является метод, который возвращает обещание. Так что вам нужно, это больше похоже на

return elm.getText().then(function(text){ 
    return text; 
}); 

При вызове метода, как GetText или getInnerHtml, он возвращает только обещание. Если вы не используете , ожидайте. Если вы хотите, чтобы обещание было разрешено для получения значения, вам нужно связать , затем, чтобы вернуть значение.

+0

Я не говорю, что это не правильный способ возврата; однако события кликов все еще не работают. +1 за усилие. Также исправленный ответ выше –

1

DUPLICATE: ANSWER HERE

Вам нужно обернуть it блок в IIFE, чтобы заставить синхронности

for(var i=0; i < testParams.length; i++) { 

    (function(testSpec) { 
     it('write your test here', function() { 
      //test code here 
     } 
    })(testParams[i]); 

}; 
3

вышеуказанные ответы и подходы все, кажется, принять «синхронный» подход, поэтому я бы как предложить решение, которое я нашел для той же проблемы, которая использует стандартный подход асинхронного транспортира.

В этом примере нижний колонтитулы ссылки текстовые ссылки, такие как «о», CONTACT»и т.д. - и эти карты к URL, такие как„/ о“и„/“контакта и т.д.

Редактировать : ptor определяется ранее из protractor.getInstance();

it('should have a working set of footer links to internal pages', function() { 
    // element.all(-your selectors-) 
    // .then() is passed an ARRAY of element finders 
    element.all(by.css('.footer .nav .links')).then(function(elems) { 

    // for each element .getText() returns a promise 
    var txts = elems.map(function(elem) { 
     return elem.getText().then(function(txt) { 
     if(txt != ''){ 
      return txt; 
     } 
     }); 
    }); 

    // txts is now an ARRAY of promises 
    // When they are ALL fulfilled the loop below is run 
    protractor.promise.all(txts).then(function(links) { 
     for (var i=0; i<links.length; i++) { 
     // reset browser back to page of interest 
     // the home page in this case 
     browser.get('/'); 

     // get a fresh instance of the element and click it 
     // attempts to click pre-created element list 
     // will result in 'stale' elements references as pages 
     // are being navigated 
     element.all(by.css('.footer .nav .links')).get(i).click(); 

     // expectation of navigation 
     expect(ptor.getCurrentUrl()).toContain(links[i].toLowerCase()); 
     } 
    }); 

    }); 

}); 

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

  • Нет связанных вопросов^_^