Я хотел бы немного поиграть с PhantomJS и, в частности, с помощью скрипта , который поставляется вместе с его примерами. Цель моего теста - проверить, доступны ли английская и французская версии сайта lipsum.com. Вот мой сценарий:Несколько waitFor звонков в скрипте phantomjs
var page = require('webpage').create(),
server = 'http://www.lipsum.com',
languages = ['en', 'fr'];
page.open(server, 'get', '', function (status) {
if (status !== 'success') {
console.log('Unable to reach the URL!');
} else {
check(languages.shift());
}
});
function check(currentLanguage) {
console.log('Checking '+currentLanguage);
waitFor(function() {
var classes = page.evaluate(function() {
// Checks if the current language is selected
return document.getElementsByClassName('zz')[0].className;
});
console.log("Classes for the selected element : " + classes);
return classes.indexOf(currentLanguage) === 0;
}, function() {
console.log(currentLanguage+' has been looked up.');
currentLanguage = languages.shift();
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function (language) {
// We click on the link related to the next language of the stack
$('.'+language).trigger('click');
}, currentLanguage);
});
check(currentLanguage);
});
}
Что бы я хотел, это то, что отображаются английские, затем французские версии страницы. Вместо этого я получаю следующий журнал:
Checking en
Classes for the selected element : en zz
'waitFor()' finished in 500ms.
en has been looked up.
Checking fr
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
Classes for the selected element : en zz
'waitFor()' timeout
Похоже щелчку на ссылке не срабатывает, но я не могу понять, почему.
Большое спасибо! Я не сомневался в том, что был какой-то асинхронный вопрос, вы заставили меня взглянуть в нужное место. Я также увеличил тайм-аут, как это было предложено. В вашем коде есть только небольшая ошибка/опечатка: 'check (currentLanguage)' должен находиться в обратном вызове onLoadFinished. –