使用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,这是一个已知的问题,目前是不可能的。
我复制了默认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);