如何阻止Selenium使用Web驱动程序创build临时的Firefoxconfiguration文件?
我正在使用Selenium Web Driver API和Java。 每次我想debugging我的testing用例时,都会在临时文件目录中创build一个临时的Firefoxconfiguration文件。 这在两个方面是令人头痛的。
- 这绝对是花费不必要的时间来创build一个configuration文件,并占用不必要的空间。
- 我无法安装下一次启动我的testing用例时可用的插件。
我如何解决这个问题?
您可以控制Firefox驱动程序如何selectconfiguration文件。 将webdriver.firefox.profile
属性设置为要使用的configuration文件的名称。 大多数人认为这是一个坏主意,因为你会inheritance所有的cookie,caching内容等 。 以前使用的configuration文件,但是如果你真的想要这样做,这是允许的。
例如:
System.setProperty("webdriver.firefox.profile", "MySeleniumProfile"); WebDriver driver = new FirefoxDriver(...);
更新 – 从Ranhiru
我如何处理它的Java
FirefoxProfile profile = new FirefoxProfile(new File("D:\\Selenium Profile")); WebDriver driver = new FirefoxDriver(profile);
然后,我改变了Firefox中的设置,以便在退出时清除所有Cookie和caching。 看看这里如何做到这一点。
一定要打电话
driver.quit();
代替
driver.close();
close()不会删除临时文件
您可以通过调用FirefoxProfile
类中的addExtension(File)
方法来加载FirefoxWebDriver
所需的插件。
例:
try { File firebug = new File("C:\\FFPlugins\\firebug-1.7.3.xpi"); File xpathChecker = new File("C:\\FFPlugins\\xpath_checker-0.4.4-fx.xpi"); profile.addExtension(firebug); profile.setPreference("extensions.firebug.currentVersion", "1.7.3"); profile.addExtension(xpathChecker); profile.setPreference("extensions.xpath_checker.currentVersion", "0.4.4"); } catch(IOException e) { e.printStackTrace(); } driver = new FirefoxDriver(profile);
在我find文档的时候,我经历了这个问题后,答案其实很简单。 我find了FirefoxProfile
类,构造函数将pathFirefoxProfile
至Firefoxconfiguration文件。
WebDriver driver = null; FirefoxProfile profile = new FirefoxProfile(new File("C:\\Users\\Ranhiru\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\qp1nizdo.Selenium")); driver = new FirefoxDriver(profile);
我通过运行带有-p标志的“Firefox.exe”来创build一个新的configuration文件。
Firefox.exe -p
安装我需要的扩展到这个configuration文件,我很好去! 🙂
更新
无论您是否指定configuration文件,都不会创build临时文件夹中的临时configuration文件。 通过创build和分配configuration文件,您可以在testing时使用萤火虫/ xpather /您最喜爱的扩展名。
我已经通过运行命令创build了一个自定义configuration文件:
firefox -profileManager
(然后添加我需要的任何exception – 由于selenium打开干净的configuration文件/实例每次例外丢失)
然后我用这个configuration文件直接创build我的Firefox使用以下:
private static String profilePath = "C:\\fitnesse\\Selenesse\\FFProfiles"; private static FirefoxProfile ffprofile = new FirefoxProfile(profilePath); private static IWebDriver driver = new FirefoxDriver(ffprofile);
即使您明确指定了一个,也不能阻止Selenium创build临时文件。 但是testing完成后你可以清除它。
TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles()
在MacOS和Ubuntu下testing。
- 用firefox -P启动firefox
- 创build新的configuration文件(如webdriver1),添加必要的插件等
-
添加到您的testing案例:
DesiredCapabilities desiredCapabilities = new DesiredCapabilities("firefox", "", Platform.ANY); FirefoxProfile profile = new ProfilesIni().getProfile("webdriver1"); desiredCapabilities.setCapability("firefox_profile", profile); WebDriver webdriver = new RemoteWebDriver(desiredCapabilities);
您始终可以使用名为default
的configuration文件,这是用户default
使用的configuration文件。 在那里你会有所有的cookies,插件等,你将能够使用它没有任何复杂的,使用
System.setProperty("webdriver.firefox.profile", "default");
在创buildWebDriver之前
WebDriver driver = new FirefoxDriver();
为了创build一些新的configuration文件,你可以在firefox -p
shell中执行,它会显示你
除了已经存在的default
之外,还可以获得新的configuration 这会给你所有你想要的自由。
您可以直接告诉Selenium使用特定的configuration文件。 以下是其中一个示例: http : //automationtricks.blogspot.com/2010/05/how-to-run-test-cases-in-specified.html
您可以在程序开始之前指定临时文件的不同位置,以避免由于“内存空间不足”而导致程序停止运行
if(!new File("c:/temp_data").isDirectory()) //to check dir exist FileUtils.forceMkdir(new File("c:/temp_data")); //create dir if not exists TemporaryFilesystem.setTemporaryDirectory(new File("c:/temp_data")); //set new dir as temp file path for selenium FirefoxProfile profile = new FirefoxProfile();