Watin Internet Explorer, как запустить в приватном режиме?

1

Я пишу несколько автоматических веб-тестов с использованием С# Watin framework.

Я надеялся, что кто-нибудь сможет мне помочь,

Как открыть новый экземпляр IE в режиме "в приватном режиме"? (т.е. режим инкогнито)

Потребность в "приватном" просмотре - это потому, что некоторые из тестов требуют входа в систему (и я запускаю несколько параллельно)

Я не мог найти никаких ресурсов по этому вопросу. (кроме половины патча, который я нашел на каком-то форуме)

Спасибо за вашу помощь!

Теги:
internet-explorer
watin

3 ответа

2
Лучший ответ

Единственное решение, которое я смог найти, - это открыть экземпляр IE через команду в режиме инкогнито, а затем присоединить к нему Watin.

    //gen random url so we can find the window later
    Random rnd = new Random();
    int id = rnd.Next(1000, 10000); 
    string url = "id" + id+".com";
    //opening explorer
    Process.Start("IExplore.exe", "-private -nomerge " + url);
    browser = Browser.AttachTo<IE>(Find.ByUrl(new Regex(url)));
    browser.GoTo("http://www.google.com");
1

Я загрузил исходные коды WatiN, открыл IE.cs и отредактировал метод CreateIExploreInNewProcess

    private static Process CreateIExploreInNewProcess()
    {
        var arguments = "about:blank";

        if (GetMajorIEVersion() >= 8 && Settings.MakeNewIe8InstanceNoMerge)
            arguments = "-nomerge " + arguments;

        if (Settings.OpenInIncognitoMode == true)
        {
            arguments = "-private " + arguments;
        }

        var m_Proc = Process.Start("IExplore.exe", arguments);
        if (m_Proc == null) throw new WatiNException("Could not start IExplore.exe process");

        return m_Proc;
    }

Затем добавьте это в Settings.cs:

    /// <summary>
    /// Gets or sets a value indicating whether the browser will be opened in incognito mode.
    /// </summary>
    /// <value>
    ///     <c>true</c> if IE instance needs to be opened in incognito mode, otherwise <c>false</c>.
    /// </value>
    public static bool OpenInIncognitoMode
    {
        get { return Instance.OpenInIncognitoMode; }
        set { Instance.OpenInIncognitoMode = value; }
    }

После этого добавьте это в ISettings.cs

    /// <summary>
    /// Gets or sets a value indicating whether the browser will be opened in incognito mode.
    /// </summary>
    /// <value>
    ///     <c>true</c> if IE instance needs to be opened in incognito mode, otherwise <c>false</c>.
    /// </value>
    bool OpenInIncognitoMode { get; set; }

Наконец, отредактировал DefaultSettings.cs следующим образом:

    private struct settingsStruct
    {
        ...
        ...
        public bool makeNewIe8InstanceNoMerge;
        public bool closeExistingFireFoxInstances;
        public bool incognitoMode;
    }

    public bool OpenInIncognitoMode
    {
        get { return settings.incognitoMode; }
        set { settings.incognitoMode = value; }
    }

    private void SetDefaults()
    {
        settings = new settingsStruct
        {
            ...
            ...
            makeNewIe8InstanceNoMerge = true,
            closeExistingFireFoxInstances = true,
            incognitoMode = false
        };
    }

Скомпилируйте его и добавьте новую DLL в свой проект. После этого все, что вам нужно сделать в вашем проекте, это:

Settings.OpenInIncognitoMode = true;
var browser = new IE(url, true);
0

Хитрость заключается в передаче аргумента -private вызову IExplore.exe как здесь:

string argument = "-private -nomerge about:blank";
process = Process.Start("IExplore.exe", argument);
if (process == null)
    throw new InvalidOperationException("The IExplore.exe process can't be started");

Thread.Sleep(3000);
handle = process.MainWindowHandle.ToInt32();
var allBrowsers = new SHDocVw.ShellWindows();
if (handle != 0)
{
    foreach (InternetExplorer browser in allBrowsers)
        if (browser.HWND == handle)
        {
            ie = browser;
            iehandle = (IntPtr)ie.HWND;

            break;
        }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню