Java 如何阻止Selenium使用Web驱动程序创建临时Firefox配置文件?

Java 如何阻止Selenium使用Web驱动程序创建临时Firefox配置文件?,java,selenium,firefox,webdriver,profile,Java,Selenium,Firefox,Webdriver,Profile,我将SeleniumWeb驱动程序API与Java一起使用。每次我想调试测试用例时,都会在临时文件目录中创建一个Firefox的临时配置文件。这在两个方面令人头痛 创建一个概要文件肯定需要花费不必要的时间,也占用了不必要的空间 我无法安装下一次启动测试用例时可用的任何插件 我该怎么做 您可以直接告诉Selenium使用特定的配置文件。以下是一个例子: 在我浏览了找到文档的地方之后,答案其实很简单。我找到了这个类,构造函数采用了Firefox配置文件的路径 WebDriver driver = n

我将SeleniumWeb驱动程序API与Java一起使用。每次我想调试测试用例时,都会在临时文件目录中创建一个Firefox的临时配置文件。这在两个方面令人头痛

  • 创建一个概要文件肯定需要花费不必要的时间,也占用了不必要的空间
  • 我无法安装下一次启动测试用例时可用的任何插件

  • 我该怎么做

    您可以直接告诉Selenium使用特定的配置文件。以下是一个例子:

    在我浏览了找到文档的地方之后,答案其实很简单。我找到了这个类,构造函数采用了Firefox配置文件的路径

    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”创建了一个新的配置文件

    Firefox.exe -p
    
    安装了此配置文件所需的扩展,我很乐意使用!:)

    更新


    无论您是否分配配置文件,临时文件夹中的临时配置文件都会创建。通过创建和分配配置文件,您可以在测试时使用firebug/xpather/您喜爱的扩展。

    您可以控制Firefox驱动程序选择配置文件的方式。将
    webdriver.firefox.profile
    属性设置为要使用的配置文件的名称。大多数人认为这是一个坏主意,因为您将继承以前使用的配置文件的所有cookie、缓存内容等,但如果您真的想这样做,这是允许的

    例如:

    System.setProperty("webdriver.firefox.profile", "MySeleniumProfile");
    WebDriver driver = new FirefoxDriver(...);
    
    更新-来自

    我是如何为Java处理它的

    FirefoxProfile profile = new FirefoxProfile(new File("D:\\Selenium Profile"));                  
    WebDriver driver = new FirefoxDriver(profile);
    

    然后我更改了Firefox中的设置,以在退出时清除所有cookie和缓存。查看如何操作。

    您可以通过调用
    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);
    

    我已通过运行以下命令创建自定义配置文件:

    firefox -profileManager 
    
    (然后添加我需要的任何异常等-由于selenium在每次异常丢失时打开干净的概要文件/实例)

    然后,我使用以下配置文件直接创建了我的Firefox:

    private static String profilePath = "C:\\fitnesse\\Selenesse\\FFProfiles";
    private static FirefoxProfile ffprofile = new FirefoxProfile(profilePath); 
    private static IWebDriver driver = new FirefoxDriver(ffprofile);
    

    即使您明确指定了临时文件,也无法阻止Selenium创建临时文件。但您可以在测试完成后清除它

    TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles()
    
    在MacOS和Ubuntu下测试

  • 以以下内容启动firefox: firefox-P
  • 创建新的配置文件(例如webdriver1),添加必要的插件等
  • 添加到您的测试用例中:


  • 您可以在程序开始之前为临时文件指定不同的位置,以便程序不会因“内存空间不足”而停止

    一定要打电话给

    driver.quit();
    
    而不是

    driver.close();
    

    close()不会删除临时文件

    您可以始终使用名为
    default
    的配置文件,该配置文件是用户默认使用的配置文件。在那里,您将拥有所有的cookie、插件等,并且您将能够使用它而不会出现任何复杂情况,使用

    System.setProperty("webdriver.firefox.profile", "default");
    
    在创建WebDriver之前

    WebDriver driver = new FirefoxDriver();
    
    要创建一些新的配置文件,您可以在shell
    firefox-p
    中执行,它将显示给您


    并在现有的
    默认配置文件之外获取新配置文件。这会给你所有你想要的自由。

    好问题,我也在寻找答案。这也是selenium 1的一个问题。您将对此线程进行详细解释。。。。这适用于Selenium RC。我正在使用Selenium Web驱动程序API。我花了好几个小时弄明白了为什么它不会使用指定的配置文件。。。官方文档称
    webdriver.firefox.profile启动firefox时要使用的配置文件名。它没有提到它仍然创建新的匿名配置文件,它只是使用指定的一个作为源。哦,好吧,谢谢你的更新,现在我知道了。
    然后我更改了Firefox中的设置,以在退出时清除所有cookie和缓存。
    -我认为这没有必要,因为Selenium仍将创建临时配置文件。它使用您指定的配置文件作为基础,即复制设置,因此原始配置文件不应更改。这并不能解决问题1。正如前面的回答所说,无论如何都会创建一个临时配置文件,因此会占用时间和空间。@VsevolodGolovanov您找到解决方案了吗?目前我正面临这个问题。@abc,1。这只是让我感到困扰,因为当时FF自己的开发工具还不够,有时我需要Firebug。设置基本配置文件的选项足以在必要时修复此问题。2.今天FF的开发工具已经足够成熟,Firebug已经死了,所以这不再是一个问题。3.无论如何,我现在已经从FF切换到Chrome进行UI测试,因为FF切换到不完整的木偶破坏了一些东西。4.临时配置文件性能命中对我来说从来都不是问题-如果测试本身很胖,这是可以忽略的。@abc,请记录,Chrome测试目前需要5秒才能在我的开发人员PC上启动,不记得FF有多少。这应该是一个注释,而不是答案。这是如何回答这个问题的?这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时在自己的帖子上发表评论,一旦有足够的评论,您就可以发表评论。@JohannesKlauß这正好回答了答案的这一部分=“占用了不必要的空间”。如果您没有正确调用driver.quit(),您将以大量Gb的虚拟配置文件数据结束。.close()也是nodejs实现的解决方案,它可以留下一个临时文件夹和5MB的文件。请注意,如果有多个窗口,则
    close()
    quit()
    不同。
    System.setProperty("webdriver.firefox.profile", "default");
    
    WebDriver driver = new FirefoxDriver();