0

Я работаю над тестированием нашего веб-приложения. Все наше приложение через iframe, и для доступа к нему вы должны войти в систему.Casper JS -cant Войти на сайт в пределах iframe

Сейчас я пытаюсь проверить страницу входа (которая находится внутри iframe). Я могу получить доступ к форме и кнопкам без проблем, но, хотя URL-адрес изменен, когда я нажимаю submit с помощью Casper JS, страница никогда не изменяется.

Я пробовал различные таймауты, ect ожидания waitFor. У кого-нибудь есть мысли о том, что может блокировать страницу?

сайт: witkit.com

тест:

var routine = { 
    login: function(email, pass, test) { 
     casper.then(function() { 
      this.withFrame(0, function() { 
       this.waitUntilVisible('form#login-form', function() { 
        this.fill('form#login-form', { 
         email: email, 
         password: pass 
        }, false); 
       }); 
      }); 
     }); 
     casper.then(function(){ 
      casper.withFrame(0, function() { 
       this.click("#modalButtonLogin"); 
      }); 
     }); 
    } 
}; 



casper.test.begin('Logs in', function(test) { 

    casper.start("https://web.witkit.com/#"); 

    casper.then(function(test) { 
     routine.login('*******@witkit.com', '*******', test); 
    }) 

    .wait(3000, function(){ 
     test.assertUrlMatch(this.getCurrentUrl(), 'https://web.witkit.com/#kit/176637403872624641'); 
    }) //this passes 

    casper.wait(10000, function(){ 
     this.withFrame(0, function() { 
      this.echo(this.getHTML()); // this shows login page html 
     }); 
    }) 

    .waitForSelector('.wkKitTitle', function() { 
     // this will never show 
    }) 

    .run(function() { 
     test.done(); 
    }); 

}); 
+1

Я помню, как работала над чем-то совсем недавно, когда имелось ограничение на выполнение любого типа входа в систему iFrame. Я подозреваю, что если вы перейдете на страницу напрямую, вы можете войти в систему просто отлично, но когда это делается в iFrame (косвенно), это ничего не делает? Вы видели эту тему: http://stackoverflow.com/questions/11439927/how-can-i-http-authentication-login-with-javascript-for-an-iframe – mwilson

+0

Я могу заполнить форму любой ценностью, и это 'test.assertUrlMatch' все еще проходит. Так что это действительно не вход в систему. –

+0

Похоже, проблема связана с попыткой входа в систему с этим .click («# modalButtonLogin») ;. Пробовали ли вы проверить, действительно ли кнопка нажата? Возможно, вам придется сначала получить идентификатор iframe, а затем нажать кнопку, когда вы находитесь внутри iframe, - см. Http://stackoverflow.com/questions/1452871/how-can-i-access-iframe-elements-with -javascript –

ответ

1

Основная проблема заключается в том, что ваш iframe#Content еще не в DOM, когда вы выполняете вход, по какой-то причине потребуется некоторое время для загрузки.

Чтобы решить эту проблему, вы должны дождаться этого iframe#Content (с таймаутом 20-х годов) перед выполнением логина, а также перед показом страницы входа html. Кстати, я также предпочитаю использовать iframe id как первый параметр при вызове this.withFrame вместо индекса для удобочитаемости и допуска к изменениям на странице.

Я внесла изменения в свой код и протестировал его. Кажется, что работает сейчас:

var routine = { 
    login: function(email, pass, test) { 
     casper.then(function() { 
      this.withFrame("Content", function() { 
       this.waitUntilVisible('form#login-form', function() { 
        this.fill('form#login-form', { 
         email: email, 
         password: pass 
        }, false); 
       }); 
      }); 
     }); 
     casper.then(function(){ 
      casper.withFrame("Content", function() { 
       this.click("#modalButtonLogin"); 
      }); 
     }); 
    } 
}; 



casper.test.begin('Logs in', function(test) { 

    casper.start("https://web.witkit.com/#"); 

    casper.waitForSelector('iframe#Content', function(test) { 
     routine.login('*******@witkit.com', '*******', test); 
    }, function onTimeout(){}, 20000) 

    .wait(3000, function(){ 
     test.assertUrlMatch(this.getCurrentUrl(), 'https://web.witkit.com/#kit/176637403872624641'); 
    }) //this passes 

    casper.waitForSelector('iframe#Content', function(test) { 
     this.withFrame('Content', function() { 
      this.echo(this.getHTML()); // this shows login page html 
     }); 
    }, function onTimeout(){}, 20000) 

    .waitForSelector('.wkKitTitle', function() { 
     // this will never show 
    }) 

    .run(function() { 
     test.done(); 
    }); 

});