将注册表项更新为“提示用户名和密码登录”

本文关键字:密码 登录 用户 提示 注册表 更新 | 更新日期: 2023-09-27 18:08:36

我正面临登录使用windows身份验证的应用程序的提示问题。使用Selenium Web-driver和c#来驱动我的测试自动化。

场景:我正在测试一个基于windows身份验证的web应用程序。我的要求是测试不同的windows用户(安全/基于角色的测试)。对于Chrome浏览器,我可以将Windows用户详细信息(域,用户名和密码)直接传递到URL,这成功了。

对于IE浏览器,通过URL传递凭据不起作用。我尝试通过使用Internet选项->安全->区域->自定义级别->用户身份验证选项手动提示登录屏幕(Windows安全)。

我计划通过使用注册表项的代码做到这一点。下面的代码

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext testContext)
    {
        long setPrompt = -1;
        string regEditKey = @"SOFTWARE'Microsoft'Windows'CurrentVersion'Internet Settings'Zones'1";
        using (RegistryKey regKeys = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64).OpenSubKey(regEditKey, true))
        {
            if (regKeys != null)
            {
                setPrompt = Convert.ToInt64(regKeys.GetValue("1A00"));
                if (setPrompt != 65536)
                {
                    regKeys.SetValue("1A00", (object)65536, RegistryValueKind.QWord);
                    regKeys.Close();
                    regKeys.Flush();
                }
            }
        }
    }

我试图在测试执行开始之前调用上面的方法,这应该是整个测试运行的一次。并把它放回原来的大会清理。代码工作正常,它将注册表项更新为"65536"。但是当我启动IE浏览器时,它不要求登录凭证,它直接使用我的windows凭证。

参考注册表项详细信息文档。

任何帮助都将是非常感激的。

谢谢,

Sham_

EDIT:更新代码以包含解决方案。问题是@Ron提到的,IExplore是32位的。要在64位机器上运行32位IExplore。注:regEditKey字符串中Wow6432Node

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext testContext)
    {
        long setPrompt = -1;
        string regEditKey = @"SOFTWARE'Wow6432Node'Microsoft'Windows'CurrentVersion'Internet Settings'Zones'1";
        using (RegistryKey regKeys = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(regEditKey, true))
        {
            if (regKeys != null)
            {
                setPrompt = Convert.ToInt64(regKeys.GetValue("1A00"));
                if (setPrompt != 65536)
                {
                    regKeys.SetValue("1A00", (object)65536, RegistryValueKind.DWord);
                    regKeys.Close();
                    regKeys.Flush();
                }
            }
        }
    }

将注册表项更新为“提示用户名和密码登录”

我知道这是迟来的响应,但6年后ie浏览器不再支持windows 10, EDGE不包含此设置,因此此更新的解决方案可能不再工作。

所以如果你在windows 10上有这个问题,在CurrentUser非64注册表路径下编辑这个将解决它。

我在windows 10 64/32位机器上使用这段代码,这些机器有默认的EDGE浏览器,它每次都有效。

所以代码应该是这样的:
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext testContext)
{
    long setPrompt = -1;
    string regEditKey = @"SOFTWARE'Microsoft'Windows'CurrentVersion'InternetSettings'Zones'1";
    using (RegistryKey regKeys = 
    RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, 
    RegistryView.Registry64).OpenSubKey(regEditKey, true))
    {
        if (regKeys != null)
        {
            setPrompt = Convert.ToInt64(regKeys.GetValue("1A00"));
            if (setPrompt != 65536)
            {
                regKeys.SetValue("1A00", (object)65536, 
                RegistryValueKind.DWord);
                regKeys.Close();
                regKeys.Flush();
            }
        }
    }
}
请原谅我的英语不好,而不是我的优点。