Как лучше реализовать секундомер для задания определённого времени выполнения определённых сценариев на странице?

Как лучше реализовать секундомер для задания определённого времени выполнения определённых сценариев на странице? И если, например в течении минуты не выполнились определённые сценарии, начать выполнение снова

Почему именно так, потому что запускаю выполнение тестов на не сильном компьютере, т.к. тестовых задач для страниц много, я запускаю ~10 экземпляров браузера и выполняются тесты. И бывает такое что элементарные действия (заполнить поле, кликнуть на элемент) - останавливают своё выполнение на неопределённый срок.
Например если кнопка “Сохранить”: действие кликнуть, визуально видно что кнопка “зажата” и остаётся в этом положении, но кнопка не отпускается и соответственно другой метод ожидает появления нужного элемента на странице, чтобы продолжить выполнение определённых сценариев.
Точно также с чек боксами, он как бы зажимается, но на действии “клик” выполнение замораживается, чекбокс какбы зажат, но не выбран ещё. А если кликнуть мышкой на кнопку то продолжает выполнение действий

Бывают “затупы” на регистрации и авторизации, есть имеилы и пароли реальных пользователей в файлах, они извлекаются из файлов нормально, но иногда бывает так что имейл в соответствующее поле ввёлся, дальше считывается из файла пароль, но не вставляет в нужное поле соответствующее значение


По сути мне нужно инициализировать счётчик в тесте, по истечению определённого времени работы на странице, должна быть активна определённая кнопка (значит что все поля заполнены корректными данными) и если она не активна то обновить страницу и возобновить выполнение соответствующих сценариев

Ну или посоветуйте как оптимизировать действия, если так, то выложу куски кода

10 браузеров на не слишком мощной машине? И это при том что современные браузеры прожорливые?
Не слишком мощная машина это какая? Вот у меня 10 инстансов на 8 гб памяти и core i3 работают ок.

Но я думаю что дело тут не в перфомансе машины, а возможностях вашей архитектуры правильно работать в многопоточном режиме. Выкладывайте код от создания драйвера до передачи его в тест.

    FirefoxProfile profile = new FirefoxProfile();
    profile.setEnableNativeEvents(false);
    DesiredCapabilities capability = DesiredCapabilities.firefox();
    capability.setBrowserName("firefox");
    capability.setCapability(FirefoxDriver.PROFILE, profile);
    driver = new FirefoxDriver(profile);
    driver.get("http://trafficapp.softproject.com.ua/login#/");
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Я по спартански запускаю сейчас тесты - просто по отдельности запускаю несколько тестов одновременно

И что вы в каждом тесте вот так вот инициализируете драйвер? Для каждого теста перезапускате браузер что ли?

Лучше почитайте темы о том как организовать структуру фреймворка, чем темы о том как лепить костыли из задержек

Test NG? Я про него то и позабыл, завтра разберусь

Или может что ещё посоветуете?

в TestNG и JUnit у аннотации @Test есть параметр timeout. Если тест выполняется больше указанного в нем времени - он будет прерван. Можно попробовать его использовать.
Чтоб перезапускать - в TestNG можно ловить какие-то эксепшны в AfterTest и на основании их - рестартовать.
В JUnit - можно через Rule сделать перезапуск тестов.

1 лайк

Спасибо за совет
Но есть проблема, с помощью TestNG запускаю тесты, но при открытии нового браузера тест в потерявшем фокус браузере прекращается. Уверен что я что-то мелкое упустил, но не могу разобраться что :frowning:
В одном классе есть 4 метода, которые запускают мои тесты с разным набором данных в разных браузерах
Определил методы по группам типа “ff.test1” и “gc.test1”
В xml файле запускаю так:
Но пока открываются новые браузеры, тесты в предыдущих прекращают выполнение, остаётся рабочим последнее открывшееся окно браузера