我正在尝试验证selenium-chromedriver是否可以在多个webdriver实例之间共享cookie。我的想法是,我将创建一个webdriver实例并登录到应用程序。我将保持此webdriver实例运行,并将创建另一个webdriver实例并尝试访问同一站点上的安全页面。由于我已经从第一个实例登录到应用程序,因此我应该自动登录到第二个实例。但这没效果。经过大量的研究,我发现我需要设置一个指定Chrome创建会话cookie的目录,同时创建chromedriver实例。以下是我的代码。
public class TestClass {
private static WebDriver webDriver = null;
public static void main(String[] args) throws InterruptedException {
TestClass tc = new TestClass();
if(webDriver == null) {
webDriver = tc.getWebDriverInstance();
webDriver.get("https://example.com/loginpage");
//enter userid/password, click login button
//login is successful and redirected to next page - https://example.com/securepage
}
WebDriver newWebDriverOne = this.getWebDriverInstance();
newWebDriverOne.get("https://example.com/securepage"); // this doesn't work
WebDriver newWebDriverTwo = this.getWebDriverInstance();
newWebDriverTwo.get("https://example.com/securepage");// this doesn't work
}
WebDriver getWebDriverInstance(){
DesiredCapabilities dCaps = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:/user/me/selenium/chrome");
dCaps.setCapability(ChromeOptions.CAPABILITY, options);
return new ChromeDriver(dCaps);
}
}
问题是,当我在第一个实例之后创建的newWebDriver实例上调用get()时,没有任何反应。 Selenium打开了第二个窗口,因为我创建了一个新的webdriver实例,但是get()没有做任何事情。我尝试在打开的窗口中手动输入安全页面URL并且它有效。我能够看到安全页面而不会被重定向到登录页面。
如果我们指定user-data-dir,似乎不可能拥有多个webdriver实例。在会话之间是否还有其他选项可以共享cookie数据?
-----更新------ 我试图这样做的原因是一个非常奇特的用例。
- >我需要同时运行多个自动化运行 - 只有我知道实现这一点的方法是创建多个webdriver实例。
- >自动化脚本只需使用一个帐户登录。并且IDP一次只允许一个活动会话。这意味着,如果自动化脚本登录第二个webdriver实例,则第一个webdriver实例将注销。
因此,在研究在webdriver实例之间共享会话的方法时,我遇到了user-data-dir选项。
答案 0 :(得分:0)
难道你不能只使用一个Chrome个人资料并将Cookie保存在一个个人资料中,它会自动登录这些细节,因为它会记住你吗?我不明白为什么你需要两个实例。
如果您想使用多个实例,我假设您必须在单独的实例中加载完全相同的配置文件,因为新配置文件不起作用。