我一直在尝试将webdriver
注入到步骤中。我使用了这些指令,它能够正常运行。
思路是将WebDriver作为服务注入到步骤类中。在最初的步骤中,您需要添加以下依赖项。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-spring</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
涉及依赖注入的主要有三个类,我们将一一介绍。
BaseUtil
BaseUtil是一个包含了Selenium WebDriver属性的类。这个类非常简单:
public class BaseUtil {
private WebDriver driver;
public WebDriver getDriver() {return driver;}
public void setDriver(WebDriver driver) { this.driver = driver;}
}
钩子函数
Hook类包含@Before, @After
。方法testInitialier()负责加载WebDriver文件并创建实例,而方法testTearDown()负责关闭浏览器。
public class Hook extends BaseUtil{
BaseUtil base;
@Before
public void testInitializer(){
File file = new
File(IgniteTaskApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile());
String driverPath=file.getAbsolutePath();
System.out.println("Webdriver is in path: "+driverPath);
System.setProperty("webdriver.chrome.driver",driverPath);
base.setDriver(new ChromeDriver());
}
public Hook(BaseUtil base) {
this.base = base;
}
@After
public void tearDownTest(){
base.getDriver().close();
}
}
步骤
steps类包含来自已编译特性文件的步骤。要在Eclipse中编译特性文件,您需要安装Eclipse-Cucumber插件。
public class ClickButton_Steps extends BaseUtil{
BaseUtil base;
public ClickButton_Steps(BaseUtil base){
super();
this.base=base;
}
@When("^I clcik on the button$")
public void i_clcik_on_the_button() throws Throwable {
cb=new ClickButtonPage(base.getDriver());
cb.navigator();
}
// The other steps ...
}
怎么运行它?
打开特性文件 -> 运行为 -> 运行 Junit
问题
我想知道按照什么顺序运行方法可以实现依赖注入?
我猜想顺序如下:
- Junit 调用一个名为
testInitializer()
的@Before
方法。 testInitializer()
在 Hook 类中,因此需要创建一个Hook
类的实例。- 这会导致调用 Hook 类的构造函数。
但是,我无法理解其余的步骤。也许这根本不正确。我的意思是,我的代码是可行的,但我无法解释它的工作原理?
返回结果:
怎么运行它?
打开特性文件 -> 运行为 -> 运行 Junit
问题
我想知道按照什么顺序运行方法可以实现依赖注入?
我猜想顺序如下:
- Junit 调用一个名为
testInitializer()
的@Before
方法。 testInitializer()
在 Hook 类中,因此需要创建一个Hook
类的实例。- 这会导致调用 Hook 类的构造函数。
但是,我无法理解其余的步骤。也许这根本不正确。我的意思是,我的代码是可行的,但我无法解释它的工作原理?