是否可以在命令行中传递参数供用户选择 运行 Selenium 有头或无头?

Is it possible to pass an argument in command line for a user to choose to run Selenium headed or headless?

我知道如何 运行 我的 Selenium 测试无头,但我还需要 运行 有浏览器和 gui 头的选项。现在,我通过命令行传递“-headless”,而不是在 Selenium 代码中将 firefoxOptions headless 布尔值设置为 true。

我不熟悉通过命令行传递参数,但我知道如何遍历它们。我想知道我是否可以使“-headless”成为条件。

您可能应该使用一些构建工具,例如 gradle 或 maven。这将允许您使用 -D 参数传递属性,如下所示:./gradlew clean test -Dparam=val -Dparam2=val2。因此,您可以使用 System.getProperties()System.getPropery(prop).

在代码中检索道具

也可以使用环境变量并使用 System.getEnv()System.getEnv(varName) 检索它们。但我建议为这个特定任务使用属性。

所以想法是将 args 传递给作业,在代码中检索它们并在调用驱动程序之前将它们传递给 firefoxOptions。

我不建议在 运行 期间提示用户提供任何信息,因为这在持续集成过程 (CI) 中不起作用。 您应该选择 headless 参数是强制性的(您必须每次都显式地传递参数),还是带有一些默认值的可选参数。例如,如果没有提供参数,默认情况下测试将 运行 处于无头模式。

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

    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");
        }

使用Joptionplaneframe java摆动框架

这将打开一个促销活动,

如果您不想提示,请使用扫描仪:

        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);