2013-08-15 2 views
0

Я использую CasperJS 1.0.3 и PhantomJS 1.9.0. Время от времени возникает ошибка: 'undefined' is not an object (evaluating 'c.startedAt.getTime') [object Object],[object Object]. Еще реже это будет b.getTime вместо c.startedAt.getTime. Это происходит только на нескольких избранных страницах, и единственное, что есть у этих страниц, это то, что они очень тяжелые для JavaScript.«undefined» не является объектом (оценка «c.startedAt.getTime») или «undefined» не является объектом (оценка «b.getTime»)

Страницы загружаются и ведут себя точно так, как ожидалось, когда эта ошибка происходит, и тест продолжает работать точно так, как должен, но эта ошибка вызывает множество ложных негативов с точки зрения чистого прохода/сбоя.

Я оценил весь javascript, который используется на страницах этой ошибки, и c.startedAt.getTime и b.getTime не находятся ни в одном из файлов, как в dev, так и в мини-версиях.

Кто-нибудь видел эту ошибку? Это проблема с CasperJS? PhantomJS? Тот факт, что это происходит только на нескольких конкретных страницах, заставляет меня думать, что это проблема с этими страницами, но, как я уже сказал, я не могу найти ничего, что даже отдаленно напоминает c.startedAt.getTime или b.getTime в исходном javascript.

Я также использовал CasperJS 1.0.2 и PhantomJS 1.9.1 в различных комбинациях и до сих пор получил ошибки.

Журналы для немного контекста:

[info] [phantom] Step 1143/1151: done in 18ms. 
[info] [phantom] Step 1144/1151 (url removed for privacy) 
[info] [phantom] Step 1144/1151: done in 0ms. 
FAIL Error: TypeError: 'undefined' is not an object (evaluating 'c.startedAt.getTime') [object Object],[object Object] 
Error: TypeError: 'undefined' is not an object (evaluating 'c.startedAt.getTime')[object Object],[object Object] 
[Error: TypeError: 'undefined' is not an object (evaluating 'c.startedAt.getTime')[object Object],[object Object]] fail failed 
[Error: TypeError: 'undefined' is not an object (evaluating 'c.startedAt.getTime')[object Object],[object Object]] subject: false 
# type: fail 
# subject: false 
+1

В большинстве библиотек JavaScript отсутствует внутренняя проверка ошибок по соображениям производительности. Таким образом, неправильные вызовы библиотечных служб часто вызывают ошибки внутри библиотеки. Однако проблема с корнем - это не сам код библиотеки, а нечто построенное на ней. – Pointy

ответ

0

Скорее всего, это потому, что вы не ждете объекта для загрузки. Либо используйте waitForSelector, если его конкретный div или используйте wait. Просто сделать быстрый тест с помощью

casper.wait(11000, function(){ 
    //your code here 
}); 

Вы, возможно, потребуется заменить casper с какой объект требует casper.

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