将注册表项更新为“提示用户名和密码登录”
本文关键字:密码 登录 用户 提示 注册表 更新 | 更新日期: 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();
}
}
}
}