为什么System.setProperty不能在Class级别使用?

时间:2016-11-17 06:10:41

标签: java selenium testng

我曾尝试在main方法中使用System.setProperty而没有任何问题,但当我切换到TestNG作为我的Selenium学习的一部分时,我意识到我们无法在Class级别编写System.setProperty。它应该在方法级别或在static块中。 我只是想了解Java的特性是什么迫使我们这样做。

public class NewTest {
    public String baseUrl = "http://newtours.demoaut.com/";
    static {
        System.setProperty("webdriver.chrome.driver","D:\\paths\\chromedriver.exe");    
    }

    WebDriver driver = new ChromeDriver();

    @Test
     public void f1() {
      ...}
   }

在静态块之外写这个显示编译错误,如 "此行有多个标记,语法错误"

3 个答案:

答案 0 :(得分:3)

  

我只是想了解Java的特性是什么迫使我们这样做。

Java'的特点。是你只能在类级别编写方法和声明,并且System.setProperty()都不是:它是一个方法调用。

答案 1 :(得分:0)

执行任何操作的基本类需求方法

注意-无法调用System.out.println(“”);的方式相同

答案 2 :(得分:-1)

在类级别调用静态块中的System.setProperty() 。您可能会感到惊讶的是,每个程序只会发生一次 - 第一次引用您的NewTest类。每个JVM调用保证static个字段和块只执行一次,这是一个特性。如果您希望代码的运行频率高于您不希望使用static语句的代码。

JUnit和类似的测试框架提供了在调用的每个类或方法之前运行设置代码的专用机制。有关如何在JUnit中实现此行为的更多详细信息,请参阅@Before@BeforeClass以及this question

如果@Before / @BeforeClass未解决您的问题,请使用更多背景进行编辑,以阐明您要完成的工作。包括您尝试过的代码示例 - 以及为什么它没有工作 - 特别有用。