Я знаю, как запускать тесты Selenium без головы, но мне также нужно иметь возможность запускать их с браузером и графическим интерфейсом. Прямо сейчас я передаю '-headless' через командную строку вместо того, чтобы устанавливать для логического значения firefoxOptions headless значение true в коде Selenium.

Я новичок в передаче аргументов через командную строку, но я знаю, как их перебирать. Мне интересно, могу ли я сделать «-headless» условным.

0
cs_forgals 20 Янв 2021 в 20:13

2 ответа

Лучший ответ

Вероятно, вам следует использовать какой-нибудь инструмент для сборки, например gradle или maven. Это позволит вам передавать свойства с параметром -D, например: ./gradlew clean test -Dparam=val -Dparam2=val2. Таким образом, вы могли бы получить реквизиты в своем коде с помощью System.getProperties() или System.getPropery(prop).

Также можно использовать переменные среды и получать их с помощью System.getEnv() или System.getEnv(varName). Но я бы рекомендовал использовать свойства для этой конкретной задачи.

Идея состоит в том, что вы передаете аргументы в задание, извлекаете их в своем коде и передаете их в firefoxOptions перед вызовом драйвера.

Я бы не рекомендовал предлагать пользователю предоставить какую-либо информацию во время запуска, так как это не будет работать в процессе непрерывной интеграции (CI). Вы должны выбрать, должен ли параметр headless быть обязательным (вам придется каждый раз явно передавать параметры) или необязательным с некоторым значением по умолчанию. Например, если не указан параметр, по умолчанию тесты будут выполняться в автономном режиме.

./gradlew clean test -Dbrowser=firefox -Dheadless=true

0
Vitaliy Moskalyuk 20 Янв 2021 в 17:38
    int dialogButton = JOptionPane.YES_NO_OPTION;
    int dialogResult = JOptionPane.showConfirmDialog(null, "Would you want to run this test in headless mode?",null, dialogButton);
    
    ChromeOptions options = new ChromeOptions();
    if(dialogResult == JOptionPane.YES_OPTION){
          // Saving code hereoptions
        options.addArguments("--headless");
        }

Использовать Joptionpane Jframe java swing framework

Это откроет подсказку,

Если вам не нужна подсказка, воспользуйтесь сканером:

        Scanner scanner = new Scanner(System.in);

        //  prompt for the user's name
        System.out.print("Enter yes or no: ");

        // get their input as a String
        String input= scanner.next();
        
        System.out.print(input);
0
PDHide 20 Янв 2021 в 18:29