基本上每次我从 Eclipse 运行我的 java 代码时,webdriver 都会启动一个新的 ie 浏览器并在大多数情况下成功执行我的测试。但是,我有很多测试要运行,而且 webdriver 每次都启动一个新的浏览器会话很痛苦。我需要一种重新使用以前打开的浏览器的方法;所以webdriver会第一次打开,然后第二次,我运行我的eclipse程序,我希望它简单地拿起以前的浏览器实例并继续在同一个实例上运行我的测试。这样,我每次运行程序时都不会启动新的浏览器会话。
假设你有 100 个测试要在 Eclipse 中运行,你点击了那个运行按钮,它们都运行了,然后在大约第 87 个测试时你得到一个错误。然后你回到eclipse,修复那个错误,但是你必须从头开始重新运行所有100个测试。
最好在第 87 次测试中修复错误,然后从第 87 次测试恢复执行,而不是从头开始重新执行所有测试,即从测试 0 一直到 100。希望我足够清楚你们的一些帮助,谢谢顺便说一句。
下面是我尝试维护和重用 webdriver Internet Explorer 浏览器实例的尝试:
public class demo extends RemoteWebDriver {
public static WebDriver driver;
public Selenium selenium;
public WebDriverWait wait;
public String propertyFile;
String getSessionId;
public demo() { // constructor
DesiredCapabilities ieCapabilities = DesiredCapabilities
.internetExplorer();
ieCapabilities
.setCapability(
InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
driver = new InternetExplorerDriver(ieCapabilities);
this.saveSessionIdToSomeStorage(getSessionId);
this.startSession(ieCapabilities);
driver.manage().window().maximize();
}
@Override
protected void startSession(Capabilities desiredCapabilities) {
String sid = getPreviousSessionIdFromSomeStorage();
if (sid != null) {
setSessionId(sid);
try {
getCurrentUrl();
} catch (WebDriverException e) {
// session is not valid
sid = null;
}
}
if (sid == null) {
super.startSession(desiredCapabilities);
saveSessionIdToSomeStorage(getSessionId().toString());
}
}
private void saveSessionIdToSomeStorage(String session) {
session=((RemoteWebDriver) driver).getSessionId().toString();
}
private String getPreviousSessionIdFromSomeStorage() {
return getSessionId;
}
}
我的希望是,通过覆盖 remoteWebdriver 的 startSession() 方法,它会以某种方式检查我是否已经在 ie 中打开了一个 webdriver 浏览器的实例,而是使用该实例而不是每次我点击时都重新创建一个新实例日食中的那个“运行”按钮。
我还可以看到,因为我正在从我的构造函数创建一个“新驱动程序实例”,因为构造函数总是首先执行,它会自动创建新的驱动程序实例,所以我可能需要以某种方式改变它,但不知道如何。
我是 stackoverflow 和 selenium webdriver 的新手,希望这里有人可以提供帮助。
谢谢!