Selenium Firefox 配置文件:设置指南

⚡ 智能摘要

Firefox 用户配置文件存储属于某个浏览器用户的书签、密码、插件和偏好设置, Selenium WebDriver 可以加载专用配置文件,以便每次自动运行都从相同、可预测的浏览器状态开始。

  • 🔘 个人资料基本信息: A Firefox 配置文件将用户的书签、保存的密码、插件、证书和偏好设置保存在一个文件夹中。
  • ☑️ 个人资料位置: Windows,Linux和 macOS 每个存储配置文件文件夹都位于用户目录下的不同路径中。
  • 配置文件创建: 内置的配置文件管理器通过 firefox.exe -p 打开,并分五步构建一个干净的自动化配置文件。
  • 🧪 Code 访问: ProfilesIni 类读取 profiles.ini 文件,getProfile 方法返回指定的配置文件。 Firefox配置文件对象。
  • 🛠️ 当前语法: Selenium 3 和 4 通过配置文件 FirefoxOptions.setProfile 而不是 Firefox驱动程序构造函数。
  • ⚠️ 喜好: setPreference 控制浏览器启动前的下载文件夹、通知、语言和证书处理。

Selenium Firefox 个人资料设置指南

Selenium Firefox 简介

Firefox 配置文件是设置、自定义、附加组件和其他个性化设置的集合,可以在 Firefox Browser。 您可以定制 Firefox 适合您的个人资料 Selenium 自动化要求。

也, Firefox 或任何其他浏览器都会处理 SSL 证书设置。因此,与测试执行代码一起自动化它们非常有意义。

简而言之,配置文件是用户的个人设置。当您想要运行一个可靠的 自动化 上 Firefox 如果使用浏览器,建议创建一个单独的配置文件。专用配置文件还可以避免测试过程中收集到您日常的浏览数据,这是在测试过程中首先要排除的问题。 Selenium 脚本在两台机器上的运行情况不同。

您的配置文件文件夹在磁盘中的位置

Firefox 个人资料就像不同的用户使用 Firefox. Firefox 保存书签、密码和用户偏好等个人信息,这些信息可以使用个人资料管理器进行编辑、删除或创建。

下面的屏幕截图显示了磁盘上显示的配置文件文件夹,该文件夹以配置文件名称加上随机前缀命名。

Firefox 磁盘上显示的配置文件文件夹及其随机前缀

配置文件的位置如下

  • 对于 Windows > C:\Users\ \AppData\Roaming\Mozilla\Firefox\Profiles\profile_name.default
  • 对于 Linux ~/.mozilla/firefox/profile_name.default/
  • 对于 Mac OS X > ~/Library/Application Support/Firefox/配置文件/配置文件名称.default/

为了成功举办 Selenium 测试,一个 Firefox 个人资料应该是 -

  • 容易装载
  • 如果需要,请设置代理
  • 根据自动化需求的其他用户特定设置

如何设定 Firefox 个人资料 Selenium 检测

让我们一步一步地看看如何创建一个 Firefox 个人资料。

步骤1) 关上 Firefox 浏览器

第一步,关闭 Firefox 如果它已经打开。配置文件管理器在打开期间不会启动。 Firefox Windows正在运行。

步骤2) 打开运行 (Windows 键 + R)并输入 firefox.exe –p

按下“确定”按钮之前,“运行”对话框应该如下图所示。

Windows 输入 firefox.exe -p 命令运行对话框

注意:如果打不开,您可以尝试使用用引号括起来的完整路径。

  • 在 32 位系统上 Windows: “C:\Program Files\Mozilla Firefox\firefox.exe” -p
  • 在 64 位系统上 Windows (32位 Firefox): “C:\Program Files (x86)\Mozilla Firefox\firefox.exe” -p

步骤3) 选择用户个人资料

现在,一个名为“对话框” Firefox 将会打开,如下图所示。

Firefox 在“选择用户配置文件”对话框中列出现有配置文件

步骤4) 创建个人资料

选择下图所示的“创建配置文件”选项以启动向导。

创建个人资料向导欢迎屏幕 Firefox 个人资料管理器

现在,从窗口中选择“创建配置文件”选项,将打开一个向导。单击下一步。

步骤5) 提供您的个人资料名称

在下面高亮显示的字段中输入自动化配置文件的名称,然后完成向导。

进入一个新的 Firefox 在“创建配置文件向导”中输入配置文件名称

现在您的个人资料已准备好,您可以选择您的个人资料并打开 Firefox从这里开始,该配置文件就像任何其他浏览器会话一样运行,因此 第一个 WebDriver 脚本 会原封不动地与之对抗。

你会注意到新的 Firefox 窗口将不会显示任何书签和收藏夹图标。

注意:下次启动时将自动加载上次选择的配置文件。 Firefox 启动。如果您想更改配置文件,则需要重新启动配置文件管理器。

自动化脚本 Selenium

配置文件创建完成后,下一步是通过代码加载它。要访问新创建的配置文件,请执行以下操作。 Firefox 个人资料 Selenium 在 WebDriver 软件测试中,我们需要使用 WebDriver 的内置类 ProfilesIni 及其 getProfile 方法,如下所示。

⚠️ 版本说明: 本节中的片段均为原文 Selenium 2 形式。目前 Selenium 释放了班级生活 org.openqa.selenium.firefox.ProfilesIni - 在 。内部的 子套餐被取消了——个人资料通过以下方式交给了司机 Firefox选项。请参阅 Firefox以下是现代版本的选项部分。

Selenium 个人资料代码

这是一段用于实现配置文件的代码,可以嵌入到…… Selenium 码。

ProfilesIni profile = new ProfilesIni();

// 这将为 Firefox 轮廓

FirefoxProfile myprofile = profile.getProfile("xyzProfile");

// 这将初始化 Firefox 司机

WebDriver driver = new FirefoxDriver(myprofile)

让我们通过以下示例来了解这段代码的实现方式。

Firefox 配置文件示例 1

第一个示例按名称加载配置文件。下面的屏幕截图显示了编辑器中的相同脚本。

Firefox 个人资料示例 1:在编辑器中按名称加载个人资料的脚本

// import the package
import java.io.File;
      import java.util.concurrent.TimeUnit;
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;
public class FirefoxProfile {
 	public static void main(String[] args) {
	ProfilesIni profile = new ProfilesIni();
	FirefoxProfile myprofile = profile.getProfile("xyzProfile");
// Initialize Firefox driver
	WebDriver driver = new FirefoxDriver(myprofile);
//Maximize browser window
	driver.manage().window().maximize();
//Go to URL which you want to navigate
	driver.get("http://www.google.com");
//Set  timeout  for 5 seconds so that the page may load properly within that time
	driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//close firefox browser
	driver.close();
}

}

代码说明

下面是逐行代码的解释。

  • Code 第 2-7 行:首先,我们需要导入运行所需的包。 Selenium 码。
  • Code 第 8 行:创建一个公共类“Firefox轮廓。”
  • Code 第 9 行:创建一个对象(你需要具备面向对象编程的基本概念知识)。
  • Code 第 10-11 行:我们需要初始化 Firefox 使用 myprofile 作为对象的 profile。
  • Code 第 13 行:创建对象 Firefox.
  • Code 第 15 行:最大化窗口。
  • Code 第 17 行:driver.get 用于导航到指定位置。 URL.
  • Code 第 19 行:设置超时时间是为了等待一段时间,以便浏览器在继续处理下一页之前加载当前页面。
  • Code 第 21 行:关闭 Firefox.

我们再来看一个例子。

Firefox 配置文件示例 2

第二个示例跳过了 profiles.ini 文件,直接指向配置文件文件夹,如编辑器截图所示。

Firefox 配置文件示例 2 脚本指向 Firefox文件夹路径下的配置文件

import java.io.File;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;

public class FirefoxProfile2{
public static void main(String[] args) {

// Create object for FirefoxProfile
	FirefoxProfilemyprofile=newFirefoxProfile (newFile("\c:users\AppData\MozillaFirefoxProfile_name.default "));  
// Initialize Firefox driver    
	WebDriver driver = new FirefoxDriver(myprofile);
//Maximize browser window       
	driver.manage().window().maximize();
//Go to URL      
	driver.get("http://www.google.com");
//Set  timeout      
	driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//close firefox browser  
	driver.close();
    }

代码说明

下面是逐行代码的解释。

  • Code 第 1-6 行:首先,我们需要导入运行所需的包。 Selenium 码。
  • Code 第 8 行:创建一个公共类 Firefox简介2。
  • Code 第 12 行:通过引用确切路径创建 myprofile 对象。
  • Code 第 14 行:创建对象 Firefox.
  • Code 第 16 行:最大化窗口。
  • Code 第 18 行:driver.get 用于导航到指定位置。 URL.
  • Code 第 20 行:设置超时时间是为了等待一段时间,以便浏览器在继续处理下一页之前加载当前页面。
  • Code 第 22 行:关闭 Firefox.

请注意,此代码片段中的路径与原始教程中的路径完全相同。在实际机器上,反斜杠必须进行转义,例如“C:\\Users\\guru99\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\xyzProfile.default”。

如何使用 Firefox 在配置文件中 Selenium 4与 Firefox可选项

以上两个示例都只能针对特定平台编译。 Selenium 2. 之后发生了两件事,现在所有的教程都使用了新的形式。

  • ProfilesIni 已搬出 内部 子包,因此导入现在是 org.openqa.selenium.firefox.ProfilesIni。
  • 此 Firefox司机(FirefoxProfile)构造函数已被移除。配置文件附加到 Firefox选项对象会传递给驱动程序。
  • Selenium 4 超时需要 java.time.Duration 而不是一个值加上一个 TimeUnit,因此 implicitlyWait(5, TimeUnit.SECONDS) 变为 implicitlyWait(Duration.ofSeconds(5))。

下表将每个旧式调用映射到其替代调用。

旧式调用(Selenium 2) 当前呼叫(Selenium 3和4)
import org.openqa.selenium.firefox.internal.ProfilesIni; import org.openqa.selenium.firefox.ProfilesIni;
新 Firefox司机(我的个人资料) options.setProfile(myprofile); new Firefox驱动程序(选项)
implicitlyWait(5, TimeUnit.SECONDS) implicitlyWait(Duration.ofSeconds(5))
System.setProperty 为 geckodriver 已自动解决 Selenium 经理

根据当前版本重新编写的示例 1 如下所示。

import java.time.Duration;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.ProfilesIni;

public class FirefoxProfileSelenium4 {
    public static void main(String[] args) {
        ProfilesIni allProfiles = new ProfilesIni();
        FirefoxProfile myprofile = allProfiles.getProfile("xyzProfile");

        FirefoxOptions options = new FirefoxOptions();
        options.setProfile(myprofile);

        WebDriver driver = new FirefoxDriver(options);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        driver.get("https://www.google.com");
        driver.quit();
    }
}

配置文件查找本身没有改变:ProfilesIni 仍然从 profiles.ini 读取配置文件。 Firefox 应用程序数据文件夹和 getProfile 方法在名称与配置文件不匹配时仍然返回 null,因此在驱动程序启动之前添加空值检查是值得的。同一个选项对象还包含其他地方使用的参数,例如用于 最大化或调整浏览器窗口大小.

如何设定 Firefox 个人资料偏好设置 Selenium

保存配置文件只是成功的一半。大多数自动化操作需要在代码中应用一些偏好设置,才能确保在任何机器上都能实现相同的行为。`setPreference` 方法会将这些值写入配置文件副本。 Firefox 启动。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", "C:\\selenium-downloads");
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
profile.setPreference("dom.webnotifications.enabled", false);
profile.setPreference("intl.accept_languages", "es");

FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
WebDriver driver = new FirefoxDriver(options);

以下偏好设置涵盖了日常脚本编写中最常见的情况。

偏爱 它控制什么
browser.download.folderList 设置为 2 可使用自定义下载文件夹而不是系统默认文件夹。
浏览器下载目录 绝对路径 Firefox 将下载内容保存到。
browser.helperApps.neverAsk.saveToDisk 保存的 MIME 类型不显示下载对话框。
dom.webnotifications.enabled 设置为 false 可禁止网页推送通知提示。
intl.accept_languages Accept-Language 标头,对本地化运行很有用。
一般.useragent.override 替换浏览器发送的用户代理字符串。

有两个限制值得注意。首选项必须在创建驱动程序之前设置,因为 WebDriver 会在启动时复制配置文件,之后的更改将被忽略。WebDriver 还会保留一小部分与浏览器通信所需的首选项,无论您设置什么,它都会覆盖这些首选项。由于这些值存储在配置文件中而不是脚本中,因此它们也会被继承。 跨浏览器测试 测试代码无需任何修改即可运行。

相当常见 Firefox 配置文件错误 Selenium 以及如何修复它们

配置文件问题通常表现为编译错误或浏览器以错误的设置打开。下表列出了最常报告的故障及其原因。

症状 原因 固定
构造函数 Firefox司机(FirefoxProfile)未定义 构造函数在之后被移除 Selenium 2. 将轮廓包裹起来 Firefox改为传递选项对象。
无法解析导入 org.openqa.selenium.firefox.internal.ProfilesIni 该类已从内部子包中移出。 导入 org.openqa.selenium.firefox.ProfilesIni。
getProfile 上的 NullPointerException 该配置文件名称与 profiles.ini 中的任何条目都不匹配。 重新打开配置文件管理器,并准确复制名称,包括大小写。
您的 Firefox 个人资料无法加载。它可能缺失或无法访问。 另一个 Firefox 实例中已存在该配置文件,或者文件夹路径错误。 全部关闭 Firefox 然后,在窗口中验证路径是否与上面列出的位置一致。
偏好没有影响 它是在驱动程序启动后设置的,或者由 WebDriver 保留。 将所有 setPreference 调用移到上面 Firefox驱动程序构造函数。

如果浏览器启动正常,但脚本之后仍然失败,则配置文件可能不是问题所在。正在排查问题。 异常处理 Selenium 从那里开始,通常是更快的路线。

常见问题

序号 Firefox驱动程序绝不会编辑已有的配置文件。它会将配置文件目录复制到临时位置,应用 WebDriver 所需的首选项,然后从该副本启动浏览器,因此您保存的书签和密码将保持不变。

是的。配置文件中安装的任何扩展程序都会随浏览器一起加载。您也可以调用 `profile.addExtension(new File(“path/to/extension.xpi”))` 在运行时添加扩展程序,这样可以保持磁盘上的配置文件干净。

Python 没有 ProfilesIni 等效项。点 Firefox改为在配置文件目录中查找配置文件,然后在构建驱动程序之前将其分配给 options.profile 文件。 Selenium Python 然后完全克隆该文件夹,就像这样: Java 一样。

人工智能辅助测试工具会将成功运行中捕获的偏好设置与当前配置文件进行比较,并标记出偏差,例如代理或下载文件夹的更改。一些框架还利用机器学习来检测与配置文件相关的不稳定因素,从而避免构建失败。

GitHub 副驾驶 虽然能快速生成样板代码,但它经常会输出已删除的内容。 Firefox司机(Firefox从旧代码中学习到的配置文件构造函数。务必确认建议的使用情况。 Firefox在提交之前,使用 Options.setProfile 设置当前软件包。

是的。除了调用 options.setProfile(profile) 之外,还要调用 options.addArguments(“-headless”)。配置文件提供的首选项和扩展程序与之前完全相同,因为无头模式只会改变其运行方式。 Firefox 渲染结果,而不是它如何读取其配置文件目录。

因为 WebDriver 使用的是临时副本,并在会话结束时将其删除。要保留更改,请在配置文件管理器中手动编辑配置文件,或在代码中设置首选项,以便每次运行都从相同的已知状态开始。

不总是如此,但会有帮助。将个人资料附加到 FirefoxOptions 会将首选项与功能有效负载一起发送,因此远程节点会应用与本地计算机相同的下载文件夹、代理和证书处理方式。

总结一下这篇文章: