如何在Selenium和Firefox下的调用之间维护浏览器状态?

时间:2016-03-02 14:56:41

标签: c# azure firefox selenium

上下文:Microsoft Azure VM; VS2015社区; C#; Selenium.WebDriver.2.52.0; Firefox 44.0.2;控制台(即不在IIS下运行)

如何使用Selenium在Firefox下维护状态。以编程方式我转到一个页面,输入登录详细信息,并遍历到第二个域。然后我关闭浏览器,重新打开并尝试转到第二个域上的链接。我最后再次登录页面请求登录详细信息。

当以交互方式执行此操作时,浏览器会记住我在第一页上登录并自动将我传输到第二个域的页面。

我在webserver中设置了C:\Users\Bruce\AppData\Roaming\Mozilla\Firefox\profiles.ini个人资料

    [General]
    StartWithLastProfile=1

    [Profile0]
    Name=default
    IsRelative=1
    Path=Profiles/eracklz4.default

    [Profile1]
    Name=webserver
    IsRelative=1
    Path=Profiles/webserver.default
    Default=1

所以有人会认为,即使我没有明确声明我想使用webserver个人资料,但是,它会选择该个人资料并使用它。以防我继续明确陈述

       var seleniumProxy = new Proxy(); 
       seleniumProxy.HttpProxy = "localhost:" + port; // port provided by BrowserMob Proxy

...

        FirefoxBinary fb = new FirefoxBinary(@" C:\Program Files (x86)\Mozilla Firefox\firefox.exe");
        FirefoxProfileManager fpm = new FirefoxProfileManager();
        FirefoxProfile fp = fpm.GetProfile("webserver");
        fp.DeleteAfterUse = false;
        fp.SetProxyPreferences(seleniumProxy);
        IWebDriver wd = null;
        try
        {
            wd = new FirefoxDriver(fb, fp);
        }
        catch (Exception exc)
        {
            System.Diagnostics.Debug.Print(exc.Message);
        }
        IJavaScriptExecutor js = wd as IJavaScriptExecutor;
ExistingProfiles列表FirefoxProfileManager中的

webserver,因此fpm var不为空。

此时,我非常确信会话的数据会被保留,因为当我在调试器中查看fpm时,Non-Public members - > profiles - > [1] - > Value"C:\\Users\\Bruce\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles/webserver.default"

使用fpm方法将个人资料数据从fp转移到.GetProfile后,ProfileDirectory的{​​{1}}属性读为fpnull - > Non-Public members也是profileDirnull - > Non-Public memberssourceProfileDir

因此,根据权利,人们应该希望将密码保留到"C:\\Users\\Bruce\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles/webserver.default"个人资料中,尤其是当人们通过定期调用webserver将数据明确保存到个人资料时。

然而!我上次运行代码时,fp.WriteToDisk();

中有一个anonymous.359f853715d5418c87c7393c629dcb1a.webdriver-profile

当然,C:\Users\Bruce\AppData\Local\Temp个人资料中似乎有一些活动。但是,登录页面的密码未保留。

这里发生了什么?会话数据是否可以在Selenium + Firefox中保留,或者某个地方有设计决策,无论您如何指定它,都不会保存任何状态?我想做一些本质上被禁止的事情吗?

下一天

从2014年开始阅读StackOverflow posting讨论类似问题后,添加了以下代码。但是,我仍然看到Roaming中创建了临时个人资料。并且未对AppData\Local\Temp个人资料进行任何更改。问题已解决。

小一点

我目前正在尝试使用Google Chrome而不是Firefox,即

Roaming

我不太相信这会产生很大的不同。值得注意的是,我无法弄清楚如何设置或获取在Temp中创建的配置文件文件夹的名称。上面的代码创建了一个 ChromeOptions co = new ChromeOptions(); string tfn = @"C:\Temp"; co.AddArgument("user-data-dir=" + tfn); co.Proxy = seleniumProxy; IWebDriver wd = new ChromeDriver(co); 文件夹,但在VS2015C的属性视图中没有提到它。

最后

惊讶,惊讶,实际上有效。再见Firefox。你好谷歌Chrome。似乎存储了足够的会话数据,以便遍历第二个站点。可能会将目录从Temp更改为特定于客户端。感谢ActiveState Python的民众。

0 个答案:

没有答案