使用Java使用Selenium WebDriver加载Chromeconfiguration文件

我有一些麻烦,让selenium加载铬configuration文件。

String pathToChrome = "driver/chromedriver.exe"; System.setProperty("webdriver.chrome.driver", pathToChrome); DesiredCapabilities capabilities = DesiredCapabilities.chrome(); String chromeProfile = "C:\\Users\\Tiuz\\AppData\\Local\\Google\\Chrome\\User Data\\Default"; ArrayList<String> switches = new ArrayList<String>(); switches.add("--user-data-dir=" + chromeProfile); capabilities.setCapability("chrome.switches", switches); WebDriver driver = new ChromeDriver(capabilities); driver.get("http://www.google.com"); 

它开始很好,工作完美,但我想获得加载的默认configuration文件,因为我想testing它启用了一些扩展和一些首选项testing。

有没有人有一个想法,为什么这个代码不工作?

我用Selenium 2.29.1和2.28.0在windows 7 x64上使用chromedriver 26.0.1383.0进行了testing。

这些组合确实欺骗了我:)

 System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data"); options.addArguments("--start-maximized"); driver = new ChromeDriver(options); 

这是一个古老的问题,但我仍然有一个问题得到它的工作,所以我做了一些更多的研究,以了解发生了什么事情。 @PrashanthSams的答案是正确的,但我错误地将\Default添加到configuration文件path的末尾

我发现Chrome将\Default添加到user-data-dir指定的configuration文件path。 所以如果你的configuration文件path被指定为:

user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default\

它会追加\Default ,你会最终在:

C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default\Default

这与您通常在该用户configuration文件下打开chrome时所得到的configuration文件不同。

您也可以validation您的设置,如果您打开命令提示符,导航到铬可执行文件目录,并运行与指定的选项类似于此的铬:

chrome.exe --user-data-dir="C:\Users\user_name\AppData\Local\Google\Chrome\User Data"

最后,您可以在Chrome浏览器中select一个新标签,然后浏览至chrome://version/您将看到正在使用的实际configuration文件。 它将被列出如下:

configuration文件path C:\ Users \ user_name \ AppData \ Local \ Google \ Chrome \ User Data \ Default

我尝试在Windows中,以下代码为我工作:

 String userProfile= "C:\\Users\\user_name\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\"; ChromeOptions options = new ChromeOptions(); options.addArguments("user-data-dir="+userProfile); options.addArguments("--start-maximized"); WebDriver driver = new ChromeDriver(options); driver.get("http://www.google.com"); 

如何知道它是否工作?
知道的一种方法是运行该程序两次,而不会杀死以前的铬的实例。 如果configuration文件有效,则会在第一个浏览器窗口中看到第二个“作为新选项卡”的实例。 如果它不工作,你会得到第二个实例“作为一个新的浏览器窗口”。

根据ChromeDriver wiki,这是一个已知的问题,目前是不可能的。

https://code.google.com/p/selenium/wiki/ChromeDriver

我复制了默认configuration文件到任何其他文件夹,然后我连接到这个副本

 ChromeOptions options = new ChromeOptions(); options.AddArgument("--user-data-dir=C:\\AnyFolder"); driver = new ChromeDriver(options); 

所以它使用默认configuration文件

Chrome在Linux上存储configuration文件的path。

 String chromeProfilePath = "/home/(user)/.config/google-chrome/Profile3/"; 

创buildChromeOptions对象,禁用扩展并添加“.addArguments”要使用的configuration文件。

 ChromeOptions chromeProfile = new ChromeOptions(); chromeProfile.addArguments("chrome.switches", "--disable-extensions"); chromeProfile.addArguments("user-data-dir=" + chromeProfilePath); 

正如JasonG所说的那样,在这之后Google-Chrome会将\ Default添加到您提供的string中。

“/ Profile3”目录下有一个“/ Default”文件夹,所以我做了…

我将“/ Profile3”的内容复制到“/ Default”文件夹中。

像往常一样设置浏览器系统属性和path,调用接收ChromeOption的构造函数,它将正常工作。

 WebDriver driver = new ChromeDriver(chromeProfile);