Потому что у Вас блок catch ловит иксепшены только вида ArithmeticException.
Если в реалтайме вылетит иксепшн другого класса, Вы его просто не поймаете, но выполните финализацию без скриншота.
Измените на более общий:
catch (Exception e) { takeScreenshot(driver, name); }
Кстати, мой вам совет:
1) не сохраняйте скриншоты в общей свалке - со временем всё тяжелее будет находить нужный.
2) под каждый запуск автотестов создавайте (автоматически) свой пул скриншотов в отдельном каталоге (дата + время запуска).
3) так как Вы не можете гарантировать уникальность имён скриншотов, заведите себе правило перед именем ставить какой-нибудь 100% уникальный идентификатор. Таймстамп является одним из наилучших решений, но он достаточно длинный. Так как пул скриншотов хранится в директории "дата + время запуска", то можно использовать таймстамп без даты. А в зависимости от скорости выполнения автотестов можно избавиться ещё и от часов.
P.S. всё это из личного опыта, основанного на граблях.