Selenium Firefox 配置文件:设置指南
⚡ 智能摘要
Firefox 用户配置文件存储属于某个浏览器用户的书签、密码、插件和偏好设置, Selenium WebDriver 可以加载专用配置文件,以便每次自动运行都从相同、可预测的浏览器状态开始。
Selenium Firefox 简介
Firefox 配置文件是设置、自定义、附加组件和其他个性化设置的集合,可以在 Firefox Browser。 您可以定制 Firefox 适合您的个人资料 Selenium 自动化要求。
也, Firefox 或任何其他浏览器都会处理 SSL 证书设置。因此,与测试执行代码一起自动化它们非常有意义。
简而言之,配置文件是用户的个人设置。当您想要运行一个可靠的 自动化 上 Firefox 如果使用浏览器,建议创建一个单独的配置文件。专用配置文件还可以避免测试过程中收集到您日常的浏览数据,这是在测试过程中首先要排除的问题。 Selenium 脚本在两台机器上的运行情况不同。
您的配置文件文件夹在磁盘中的位置
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
按下“确定”按钮之前,“运行”对话框应该如下图所示。
注意:如果打不开,您可以尝试使用用引号括起来的完整路径。
- 在 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 将会打开,如下图所示。
步骤4) 创建个人资料
选择下图所示的“创建配置文件”选项以启动向导。
现在,从窗口中选择“创建配置文件”选项,将打开一个向导。单击下一步。
步骤5) 提供您的个人资料名称
在下面高亮显示的字段中输入自动化配置文件的名称,然后完成向导。
现在您的个人资料已准备好,您可以选择您的个人资料并打开 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
第一个示例按名称加载配置文件。下面的屏幕截图显示了编辑器中的相同脚本。
// 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 文件,直接指向配置文件文件夹,如编辑器截图所示。
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 从那里开始,通常是更快的路线。







