我正在使用Cucumber for Java和Selenium构建测试套件。我的项目结构非常类似:
现在,我所做的是在src / test / java中添加一个Hooks.java类,并使用@Before钩子设置驱动程序路径:
@Before
public void setUpDriver(){
System.setProperty("webdriver.chrome.driver", "src\\test\\resources\\seleniumdrivers\\chromedriver.exe");
}
但是,由于此方法将在每个场景之前运行,因此我想找到一种更好的方法来设置路径,因此它只执行一次。请注意,我希望在我的项目结构中使用驱动程序并使用系统属性进行设置(我的意思是,我不想将驱动程序放在我的文件系统中的某处并将其添加到PATH环境变量中)。 / p>
有更好的方法吗?
答案 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();