按照设计,每次运行新测试时,Selenium 都会为您的 Firefox 配置文件创建一个新副本。我发现这个复制时间是一个相当大的瓶颈,尤其是在运行 100 次测试时。(重新复制配置文件需要 5-15 秒)。
有谁知道对此有任何覆盖行为?我希望我的 Selenium 服务器只重用相同的 firefox 配置文件。我知道这违反了“干净地设置测试装置”的理念,但这是我愿意采取的捷径,因为我的测试不会实质性地改变我的 Firefox 配置文件,足以危及未来的测试。
我同意这是一个问题。每次都拥有一个新的 Firefox 进程副本很好,但是通过重新生成 Firefox 配置文件来使启动时间加倍有点矫枉过正。如果您在http://jira.openqa.org上打开错误报告并发送电子邮件至 patrick@browsermob.com 给我发电子邮件,我将很高兴确保我们得到适当的解决方案。
PS:我已经一次性解决了这个问题。我们使用相同的 Firefox 配置文件,只删除缓存和 cookie 数据库。但我真的应该将这个更改修补回 Selenium 源。
只需将下面的代码移到测试设置之外并进入夹具设置并保持 selenium 实例的全局(代码假定为 NUnit。)
[TestFixtureSetUp()]
public void FixtureSetup()
{
selenium = New DefaultSelenium("localhost", 4444, "*firefox", "http://localhost/");
selenium.Start();
selenium.SetTimeout("30000");
selenium.Open("/");
}
您的测试设置应如下所示:
[SetUp()]
public void SetUpTest()
{
selenium.Open("default.aspx");
selenium.WaitForPageToLoad("30000");
}
减少配置文件加载时间的一种小方法是从 firefox 配置文件中删除较大的文件。为此,请通过运行命令 firefox.exe -p 设置您自己的配置文件。创建配置文件后,进入选项并关闭 Web 测试不需要的缓存和其他绒毛。然后将您的配置文件复制到新位置并删除不需要的 sql 文件。(否则,当您再次打开它时,您会恢复使配置文件非常小的已删除文件)。当您开始 selenium 测试时,请在新位置引用您的配置文件。在此之前,我在每次测试启动时复制超过 50MB 的配置文件,现在它复制超过 3-4MB 的配置文件,启动时间几乎是即时的。
同样,这不是再次使用相同配置文件的方法,但它会减少您复制每个配置文件的时间。
使用 MSTest,我能够Firefox
通过初始化WebDriver
in ClassInitialize
(and Cleanup
) 而不是TestInitialize
:
static string path;
static IWebDriver driver;
static string baseURL;
[ClassInitialize]
public static void ClassInitialize(TestContext context) {
DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory());
path = Path.Combine(di.Parent.Parent.Parent.FullName, "Tests\\bin\\debug\\");
driver = new FirefoxDriver();
baseURL = "http://localhost:5555/";
}
[ClassCleanup]
public static void ClassCleanup() {
driver.Quit();
}
虽然这是一个老问题了!!Selenium 服务器或 RC 已过时,但 Selenium Webdriver 仍然存在同样的问题。通过 webdriver 启动 firefox 大约需要 30 秒。
但正如这里所解释的,有些人解决了这个问题“禁用未使用的网络适配器(位于控制面板\网络和 Internet\网络连接)
它被卡住了:
ExtensionConnection connection = connectTo(exe.binary, profileToUse, "localhost");
https://groups.google.com/forum/#!topic/selenium-users/a2fNfF-mD_E
虽然它对我不起作用,但可能有人想肯定地尝试一下!!
另一个出路可能是:
FirefoxProfile profile = new FirefoxProfile();
FirefoxBinary binary = new FirefoxBinary(@"path\to\firefox.exe");
FirefoxDriver driver = new FirefoxDriver(binary,profile);