Cucumber(Java)和Selenium:使用setProperty放置驱动程序路径的位置?

时间:2018-02-18 15:21:37

标签: java selenium cucumber cucumber-jvm

我正在使用Cucumber for Java和Selenium构建测试套件。我的项目结构非常类似:

  • src / test / java:这是我实施测试步骤的地方。
  • src / test / resources / features:这是我有功能文件的地方。
  • src / test / resources / seleniumdrivers:这是我放chromedriver.exe的地方。

现在,我所做的是在src / test / java中添加一个Hooks.java类,并使用@Before钩子设置驱动程序路径:

@Before
public void setUpDriver(){
    System.setProperty("webdriver.chrome.driver", "src\\test\\resources\\seleniumdrivers\\chromedriver.exe");
}

但是,由于此方法将在每个场景之前运行,因此我想找到一种更好的方法来设置路径,因此它只执行一次。请注意,我希望在我的项目结构中使用驱动程序并使用系统属性进行设置(我的意思是,我不想将驱动程序放在我的文件系统中的某处并将其添加到PATH环境变量中)。 / p>

有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

您可以创建一个属性文件,如config.properties,以存储您在整个执行过程中使用的所有全局值以及chromedriver.exe的路径,并在所有场景之前读取它并在整个执行过程中使用,如下所示

public class Hooks {
    private static boolean beforeSuit = true;
    private static String executablePath;
    static Properties prop;

    @Before
    public void beforeAll() {
        if(beforeSuit) {
            prop = new Properties();
            ClassLoader loader = Thread.currentThread().getContextClassLoader();           
            InputStream stream = loader.getResourceAsStream("/config.properties");
            prop.load(stream);
            //You can use this anywhere you want to launch the chrome.
            executablePath = prop.getProperty("executablePath");
            //To make it execute only once
            beforeSuit = false;

            //If you wish to launch browser only once , you can have that code here.
        }

        //Here you can keep code to be execute before each scenario

    }
}

答案 1 :(得分:0)

您可以将驱动程序保留在项目文件夹中,并使用System.getProperty

获取该项目路径

您可以尝试以下代码: -

 String path= System.getProperty("user.dir");

  System.setProperty("webdriver.chrome.driver", path+"\\src\\test\\resources\\test\\chromedriver.exe");

答案 2 :(得分:0)

由于您不想将其添加到PATH环境变量,您可以将 chromedriver 二进制文件放在文件系统中 (包括src\\test\\resources\\seleniumdrivers\\),仍然可以在System.setProperty()中指定如下:

@Before
public void setUpDriver(){
    System.setProperty("webdriver.chrome.driver", ".\\src\\test\\resources\\seleniumdrivers\\chromedriver.exe");
}

答案 3 :(得分:0)

如果使用Maven,则将这2个依赖项添加到pom.xml中,就可以了,现在您可以删除System.setProperty行。借助这种技术,该项目的硬编码方法更少了。

 <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>3.3.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.6.2</version>
        <scope>test</scope>
    </dependency>

此外,您需要添加此行进行设置

        WebDriverManager.chromedriver().setup();