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

问题描述 投票:0回答:4

我正在使用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环境变量中)。

有一个更好的方法吗?

java selenium cucumber cucumber-jvm
4个回答
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

    }
}

0
投票

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

您可以尝试以下代码: -

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

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

0
投票

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

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

0
投票

如果你使用Maven在你的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();
© www.soinside.com 2019 - 2024. All rights reserved.