背景
Selenium-Jupiter是一个 JUnit 5 扩展,旨在通过下载和缓存每个测试所需的 WebDriver 二进制文件来简化 Selenium WebDriver 的使用,具体取决于要使用的本地安装的 Web 浏览器。它通过包装WebDriverManager(实际上仅用于 JUnit 4 测试)来做到这一点。
问题
通过在测试类中调用测试方法时传递所需的 WebDriver 来完成(根据docs中的说明)的使用。事实上,Karate 可以通过这种方式成功启动一个 Chrome 实例,但在到达driver
相应功能文件中的关键字之前:
@ExtendWith(SeleniumJupiter.class)
public class KarateTest {
@Test
public void test(ChromeDriver driver) {
Results results = Runner.path("classpath:feature")
generateReport(results.getReportDir());
assertEquals(0, results.getFailCount(), results.getErrorMessages());
}
}
不幸的是,我无法让空手道使用功能文件中的驱动程序关键字访问和控制此浏览器窗口。是否可以在空手道中以某种方式使用 Selenium-Jupiter 管理的浏览器实例?
注意:我已经阅读了这个线程,它只是假设在没有调查的情况下使用 WebDriverManager 和空手道应该很容易。但显然,你至少必须降级到 Junit 4。但即使在那之后,我也不明白空手道如何能够接管已经由 WebDriverManager 启动的浏览器实例。
编辑:
感谢@Peter,他带领我走上了正确的道路!
我现在实际上已经使用 WebDriverManager(而不是 Selenium-Jupiter)仅在测试类中执行 ChromeDriver-Setup,并将以这种方式确定的可执行路径传输到我在 karate-config.js 中使用的系统属性中:
在我的 Java 测试类中:
@BeforeAll
public static void setupClass() {
WebDriverManager.chromedriver().setup();
System.setProperty("driverExecutable", System.getProperty("webdriver.chrome.driver"));
}
在 karate-config.js 中:
let env = karate.env; // get system property 'karate.env'
let driverType = karate.properties['driverType']; // get system property 'driverType' optionally given on command line by "-DdriverType=..."
let driverExecutable = karate.properties['driverExecutable']; // get system property 'driverExecutable' optionally given on command line by "-DdriverExecutable=..."
if (env == 'win64-java-chrome-headful') {
karate.configure(
'driver', {
type: driverType,
executable: driverExecutable,
showDriverLog: true
}
);
}
使用 Selenium-Jupiter 这似乎是不可能的,因为 WebDriver 实例的设置和启动是一次性完成的。