如何阻止Selenium使用Web驱动程序创build临时的Firefoxconfiguration文件?

我正在使用Selenium Web Driver API和Java。 每次我想debugging我的testing用例时,都会在临时文件目录中创build一个临时的Firefoxconfiguration文件。 这在两个方面是令人头痛的。

  1. 这绝对是花费不必要的时间来创build一个configuration文件,并占用不必要的空间。
  2. 我无法安装下一次启动我的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。

  1. 用firefox -P启动firefox
  2. 创build新的configuration文件(如webdriver1),添加必要的插件等
  3. 添加到您的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中执行,它会显示你

添加新的配置文件到Firefox

除了已经存在的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();