2015-07-20 3 views
0

В моем тесте мне нужно дождаться загрузки страницы, прежде чем продолжить. waitForSelector и waitForText не работают по какой-либо причине, и хотя я могу просто использовать wait(value), мне придется учитывать, что сервер может быть медленным и сделать значение намного больше, чем хотелось бы; поэтому я думал о том, чтобы сделать цикл while, сообщающий системе ждать 500 миллисекунд каждый раз, когда он возвращает, что «someCSSpath» не существует на странице. Есть ли способ сделать это (возможно «casper.DoesntExist"?), Или лучше способ сделать это?Ожидание загрузки страницы в CasperJS

var css3path = "body > div.container-fluid > div:nth-child(3) > div.row.ng-scope > div:nth-child(1) > a > div"; 
casper.waitForSelector(css3path , function(){ 
    this.test.assertExists(css3path); 
    if (casper.exists(css3path){ 
     this.echo("logged in!");} 
    else{ 
     this.echo("not logged in"); 
    }; 
}); 

Когда я использую casper.wait(6000, function(){ вместо waitForSelector, он отлично работает.
I использовать waitforselector раньше в том же формате, и это тоже работает, я думаю, что это определенная вещь, которую я ищу, это вызывает у меня проблемы.

Кроме того, когда я использую wait(6000,, тест обнаруживает, что путь CSS3 просто прекрасен, это просто waitForSelector, которые не могут найти его.

+0

Это именно то, что 'waitForSelector()'. Вероятно, вы не используете его правильно. Пожалуйста, покажите свой код, что вы ожидаете, и что на самом деле происходит (включая сообщения об ошибках, описания снимков экрана). Чтобы быть в безопасности: зарегистрируйтесь на события 'resource.error',' page.error', 'remote.message' и' casper.page.onResourceTimeout' ([Пример] (https: //gist.github. ком/artjomb/4cf43d16ce50d8674fdf)). Возможно, есть ошибки. –

+0

Вы уверены, что селектор CSS существует. Возможно, вы проверяете селектор CSS на рабочем столе, но PhantomJS загружает мобильный сайт, на котором нет такого селектора. –

+0

Какую версию PhantomJS вы используете? В v1.x есть ошибка с: nth-child selectors –

ответ

0

Было бы полезно знать, почему именно waitForSelector и waitForText не работают. Сроки выходят? Не нашли ли они требуемый селектор или текст?

Если они выбрали тайм-аут, я бы порекомендовал менять время, затрачиваемое на время, которое Каспер будет ждать до тех пор, пока он не отправит сообщение о тайм-ауте. Вы можете изменить это с помощью casper.options, прежде чем начать тесты, как так:

//Set time-out to 20000 milliseconds (20 seconds) 
casper.options.waitTimeout = 20000; 

casper.test.begin('Begin tests', function suite(test) 
{ 
    //Your tests go here 
} 

Это важно иметь тайм-аут, а не время цикла, что может петля определенно. Если с сервером что-то не так, то тесты будут тайм-аутом, и вы узнаете, что что-то не так.

Заканчивать этот вопрос для получения дополнительной информации о Javascript в то время как петли ждать флага:

Javascript - wait until flag=true

+0

Он использовал тайм-аут, но по какой-то причине он больше не делает этого, он просто сидит там, ожидая, я полагаю. – 2manysemicolons

+0

Значение времени по умолчанию, равное 5 секундам (5000 миллисекунд), поэтому может объяснить, почему ваш 'casper.wait (6000, function()' работал (может потребоваться более 5 секунд, но менее 6 для загрузки) Кроме того, я боюсь, что не могу предложить больше советов, пока вы не сделаете то, что предложил Artjom B. Любые более контекстные и/или сообщения об ошибках были бы очень полезными – Whitehawk

+0

Из интереса, каков весь путь CSS3, который вы 're using? @ 2manysemicolons – Whitehawk