Javascript 使用For循环干燥量角器咔哒声测试

Javascript 使用For循环干燥量角器咔哒声测试,javascript,selenium,selenium-webdriver,protractor,angularjs-e2e,Javascript,Selenium,Selenium Webdriver,Protractor,Angularjs E2e,问题: 如何在一次测试中点击ul>li a中的每个链接 问题:此测试通过;然而,它不是点击链接。我知道这一点,因为它不是重定向或等待2000毫秒 测试: it("should have proper page linking to all footer link", function() { browser.driver.sleep(2000); browser.ignoreSynchronization = true; //creates an arra

问题: 如何在一次测试中点击
ul>li a
中的每个链接

问题:此测试通过;然而,它不是点击链接。我知道这一点,因为它不是重定向或等待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]);
          });

      }

  });
it(“应该有正确的页面链接到所有页脚链接”,函数(){
浏览器.驱动程序.睡眠(2000年);
browser.ignoreSynchronization=true;
//创建所有菜单项的字符串数组
var titles=element.all(by.css('.leftMenu.first.submenu li a'))
.map(函数(elm){
返回elm.getText().then(函数(文本){
返回文本;
});
});
//通过标题数组遍历链接
对于(变量i=0;i
更新:找到答案:

您的主要问题是:

return elm.getText;
getText是一个返回承诺的方法。所以你需要的是

return elm.getText().then(function(text){
    return text;
});
当调用getText或getInnerHtml之类的方法时,它只返回一个承诺。如果您没有使用expect,那么如果您希望解决承诺以获得值,则需要连锁然后返回值。

复制:

您需要将
it
块包装在iLife中以强制同步

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

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

};
for(变量i=0;i
上述答案和方法似乎都采用了“同步”方法,因此我想提供我为使用标准异步量角器方法的相同问题找到的解决方案

在本例中,页脚链接是文本链接,如“ABOUT”、“CONTACT”等,这些链接映射到URL,如“/ABOUT”和“/CONTACT”等

编辑:ptor是在前面的dragrator.getInstance()中定义的

it('应该有一组指向内部页面的页脚链接',函数(){
//元素。全部(-您的选择器-)
//.then()被传递一个元素查找器数组
element.all(by.css('.footer.nav.links'))。然后(function(elems){
//对于每个元素,getText()返回一个承诺
var txts=elems.map(函数(elem){
返回elem.getText().then(函数(txt){
如果(txt!=''){
返回txt;
}
});
});
//txts现在是一系列承诺
//当它们全部完成时,将运行下面的循环
量角器.promise.all(txts).then(函数(链接){

对于(var i=0;我不是说这不是正确的返回方式;但是,单击事件仍然不起作用。+1表示努力。还更正了上面可能重复的答案,很高兴您已经解决了它。感谢分享解决方案。@alecxe您在Angular/jasmine/karma中的单元测试技能如何?
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());
      }
    });

  });

});