Cucumber picocontainer/SharedDriver 无法正确处理浏览器实例
Cucumber picocontainer/SharedDriver doesn't handle browser instance properly
我正在使用 cucumber-jvm picocontainer 在 classes 之间共享 selenium 驱动程序。我有 ShareDriver 和 WebDriverFactory class。
我的问题如下:
1. 如果我 运行 2 个测试用例,driver/browser 实例在第一个测试用例后关闭,创建新的浏览器实例,运行 第二个。我只想使用 1 个浏览器实例和 运行 测试,然后关闭它。
- IEDriverServer.exe和一个java.exe测试后卡在任务管理器,浏览器关闭。我需要手动杀死它们。每个 运行 从这些任务中创建一个新任务。我尝试了来自 Whosebug 的所有想法,但其中 none 可以解决这个问题。
谢谢!
我的 SharedDriver class:
public class SharedDriver extends EventFiringWebDriver implements Startable {
public SharedDriver() {
super(WebDriverFactory.localInternetExplorerWebDriver());
}
@After
public void embedScreenshot(Scenario scenario) {
try {
byte[] screenshot = getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");
} catch (WebDriverException somePlatformsDontSupportScreenshots) {
System.err.println(somePlatformsDontSupportScreenshots.getMessage());
}
}
@Override
public void start() {
}
@Override
public void stop() {
quit();
}
}
我的 WebDriverFactory class:
class WebDriverFactory {
static {
System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
}
static WebDriver localInternetExplorerWebDriver() {
DesiredCapabilities returnCapabilities = DesiredCapabilities.internetExplorer();
System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
//returnCapabilities.setCapability("nativeEvents", false);
returnCapabilities.setCapability("requireWindowFocus", true);
returnCapabilities.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false);
returnCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
returnCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
returnCapabilities.setCapability("ignoreZoomSetting", true);
return new InternetExplorerDriver(returnCapabilities);
}
}
SharedDriver 的实现不正确。你需要在shareddriverclass中有一个静态的webdriver字段,创建一个shutdown线程,将这个线程添加到jvm shutdown hook中。使用这个 one
如果你也想杀死它,请使用 this。在调用 REAL_DRIVER.quit().
后,将其添加到线程的 运行 方法中的关闭 hook.Add
我正在使用 cucumber-jvm picocontainer 在 classes 之间共享 selenium 驱动程序。我有 ShareDriver 和 WebDriverFactory class。
我的问题如下: 1. 如果我 运行 2 个测试用例,driver/browser 实例在第一个测试用例后关闭,创建新的浏览器实例,运行 第二个。我只想使用 1 个浏览器实例和 运行 测试,然后关闭它。
- IEDriverServer.exe和一个java.exe测试后卡在任务管理器,浏览器关闭。我需要手动杀死它们。每个 运行 从这些任务中创建一个新任务。我尝试了来自 Whosebug 的所有想法,但其中 none 可以解决这个问题。
谢谢!
我的 SharedDriver class:
public class SharedDriver extends EventFiringWebDriver implements Startable {
public SharedDriver() {
super(WebDriverFactory.localInternetExplorerWebDriver());
}
@After
public void embedScreenshot(Scenario scenario) {
try {
byte[] screenshot = getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");
} catch (WebDriverException somePlatformsDontSupportScreenshots) {
System.err.println(somePlatformsDontSupportScreenshots.getMessage());
}
}
@Override
public void start() {
}
@Override
public void stop() {
quit();
}
}
我的 WebDriverFactory class:
class WebDriverFactory {
static {
System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
}
static WebDriver localInternetExplorerWebDriver() {
DesiredCapabilities returnCapabilities = DesiredCapabilities.internetExplorer();
System.setProperty("webdriver.ie.driver", "src/test/resources/webDrivers/IEDriverServer.exe");
//returnCapabilities.setCapability("nativeEvents", false);
returnCapabilities.setCapability("requireWindowFocus", true);
returnCapabilities.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, false);
returnCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
returnCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
returnCapabilities.setCapability("ignoreZoomSetting", true);
return new InternetExplorerDriver(returnCapabilities);
}
}
SharedDriver 的实现不正确。你需要在shareddriverclass中有一个静态的webdriver字段,创建一个shutdown线程,将这个线程添加到jvm shutdown hook中。使用这个 one
如果你也想杀死它,请使用 this。在调用 REAL_DRIVER.quit().
后,将其添加到线程的 运行 方法中的关闭 hook.Add