java - 在 Cucumber 6 中初始化 webdriver
问题描述
如何在 Cucumber 中初始化 webdrivermanager java 和 DAO/Spring/?
任何@BeforeSuite 或@AfterSuite 类似的机制?
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/main/resources/Features",
glue = "com.cimb.StepsDef",
plugin = {"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:",
"json:target/cucumber-report.json"})
public class ParallelRunner {
}
Cucumber 支持 JUnits @ClassRule、@BeforeClass 和 @AfterClass 注解。这些将在所有场景之前和之后执行。不推荐使用这些,因为它限制了不同跑步者之间的可移植性;使用命令行、IntelliJ IDEA 或 Cucumber-Eclipse 时,它们可能无法正确执行。相反,建议使用 Cucumbers Before 和 After 挂钩。
请提供一些示例代码。十亿感谢您的帮助。
解决方案
您可以利用cucumber-guice
来初始化 webdriver。这也将使您的测试场景独立,因为为每个场景创建了一个新的驱动程序实例。这是我使用它的方法
要使用以下代码,您将需要cucumber-guice
依赖项
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-guice</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>
在 chromemanager 类中
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
public class ChromeManager extends DriverManager {
protected ChromeDriver driver;
@Override
protected WebDriver createDriver() {
System.setProperty("webdriver.chrome.driver", "/Users/../chromedriver");
return driver = new ChromeDriver(ChromeDriverService.createDefaultService());
}
@Override
public WebDriver getDriver() {
if (driver == null) {
this.createDriver();
}
return driver;
}
}
驱动工厂类
import org.openqa.selenium.WebDriver;
public class DriverFactory {
public WebDriver getManager() {
return new ChromeManager().getDriver();
}
}
Drivermanager 类
import org.openqa.selenium.WebDriver;
public abstract class DriverManager {
protected abstract WebDriver createDriver();
public abstract WebDriver getDriver();
}
然后在一个全球班级
import org.openqa.selenium.WebDriver;
import io.cucumber.guice.ScenarioScoped;
@ScenarioScoped
public class Global {
public WebDriver driver;
public WebDriverWait wait;
public Global() {
driver = new DriverFactory().getManager();
wait = new WebDriverWait(driver, 3000);
}
}
最后是你的测试课
import com.google.inject.Inject;
import com.test.support.Global;
public class InitialIT {
public static ChromeDriver driver ;
@Inject
Global global;
@Test
@Given("I open the site {string}")
public void OpenSite(String site) throws MalformedURLException {
global.driver.get(site);
}
@After
public void closeBrowser() {
global.driver.quit();
}
}
如果您使用的是junit jupiter。你也可以使用selenium-jupiter
webdriver来管理
推荐阅读
- python - 控制嵌套列表/字符串的递归
- angular - 如何“注入”数据模态 .ts 到另一个
- bixby - 如何通过与 Bixby onclick 类似的方法传递结构属性
- mqtt - MQTT Broker 没有收到任何消息
- excel - 在 Excel 中,如何将具有多种数据类型的列转换为多个列,每个列对应一种不同的数据类型?
- python - Django中的下拉列表
- c# - 为 ICommand 实现非静态处理程序
- ruby - Rubocop:是否可以向 Metrics/AbcSize 警察添加排除项?
- node.js - 带有 NodeJS 的 HTTPS 设置请求标头
- ios - SwiftUI:无法将图像对齐到 ZStack 的顶部