使用ChromeDriver并使用Chrome配置文件

时间:2017-09-01 23:49:52

标签: selenium selenium-webdriver selenium-chromedriver

我正在尝试验证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选项。

1 个答案:

答案 0 :(得分:0)

难道你不能只使用一个Chrome个人资料并将Cookie保存在一个个人资料中,它会自动登录这些细节,因为它会记住你吗?我不明白为什么你需要两个实例。

如果您想使用多个实例,我假设您必须在单独的实例中加载完全相同的配置文件,因为新配置文件不起作用。