FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "x.x.x.x");
driver = new FirefoxDriver(profile);
baseUrl="http://" + login + ":" + password + "@" + url;
driver.get(baseUrl + "/");
执行测试时,页面显示身份验证弹出窗口,并且仍会加载a,直到单击为止取消按钮。那一刻,我可以访问下一页,这意味着身份验证成功,但仍然始终显示身份验证弹出窗口
#1 楼
警报方法authenticateUsing()
可让您跳过Http基本身份验证框。WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword(username, password));
从Selenium 3.4开始,它仍处于beta版本
现在仅对
InternetExplorerDriver
执行实施评论
凉!请注意,此刻它仍然标记有“ @Beta”标记selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/…
– SirLenz0rlot
2014-12-15 10:55
嗯,在最新的Chrome浏览器中,基本身份验证登录弹出窗口似乎没有被视为“警告”
– SirLenz0rlot
2015年1月7日在15:38
是的,可能仅仅是因为我在使用ChromeDriver吗?
– SirLenz0rlot
2015年1月8日10:00
这似乎没有在.NET中实现:(
– Benjrb
15年2月13日在13:55
被删除了github.com/SeleniumHQ/selenium/commits/master/java/client/src / ...
– Bhabani Sankar Mishra
17年11月21日在5:41
#2 楼
不要使用firefox配置文件,并尝试以下代码:driver.get("http://UserName:Password@Example.com");
如果要在IE浏览器中实现它,则需要执行某些操作。
如果您的身份验证服务器要求使用具有“ domainuser”之类的域的用户名,则需要在URL中添加双斜杠
/
://localdomain\user:password@example.com
评论
@Imen:尝试在网址末尾添加一个/(请参阅我的答案)
–拉尔夫
2014年10月9日13:30
您也可以使用driver.Navigate()。GoToUrl(“ http:// UserName:Password@Example.com”)。这对我有用
–金发先生
2015年9月2日,11:12
那么如果我的密码中有@符号,该怎么办。因为我的密码中有@符号。
– Badp
16年6月8日在14:19
在这种情况下,@ badp仅用密码%40替换@。它是网址编码。
– Artem G
17 Mar 24 '17在10:30
这在普通浏览器或Selenium驱动的浏览器中均不起作用。
–塞林
18年4月26日在20:43
#3 楼
尝试以下解决方案,并在遇到任何问题时通知我:driver.get('https://example.com/')
driver.switchTo().alert().sendKeys("username" + Keys.TAB + "password");
driver.switchTo().alert().accept();
这对我来说很好工作
评论
那就是对我有用的那个。显示UI时有点不可靠(可能是由于i3wm如何处理焦点),但是在无头的情况下效果很好。
–冈萨格
18-10-25在9:48
#4 楼
我在应用程序中多次遇到此问题。我们通常可以通过以下两种方法来解决此问题。
在url中传递用户名和密码本身
您可以在打开url之前创建一个AutoIT脚本并调用脚本。
请检查下面我同时提到的两种方法:Selenium Webdriver中的Handle Authentication / Login窗口
评论
AutoIt是一种原始的耻辱。 Selenium Driver为什么不实现此重要功能?
– Elmue
17年5月16日在17:38
我之前做过完全相同的方法,两者都很好。如果正确编写命令,AutoIT是非常可靠的工具,它非常稳定。
– ibaralf
18-10-24在22:20
#5 楼
通过使用AutoAuth插件,这应该适用于Firefox:FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
File ffPluginAutoAuth = new File("D:\autoauth-2.1-fx+fn.xpi");
firefoxProfile.addExtension(ffPluginAutoAuth);
driver = new FirefoxDriver(firefoxProfile);
#6 楼
如果必须处理NTLM代理身份验证,一个不错的选择是使用通过CNTLM配置本地代理。凭据和域在
/etc/cntlm.conf
中配置。 之后,您可以使用自己的代理来处理所有NTLM内容。
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
Proxy proxy = new Proxy();
proxy.setHttpProxy("localhost:3128");
capabilities.setCapability(CapabilityType.PROXY, proxy);
driver = new ChromeDriver(capabilities);
评论
如我所读,CNTLM不适用于HTTPS。这对我来说完全没有用。 sourceforge.net/p/cntlm/support-requests/14。除此之外,CNTLM是一个死项目。自2012年以来,错误报告一直没有答案。
– Elmue
17年5月16日在18:34
#7 楼
流行的解决方案是在URL中添加用户名和密码,例如http:// username:password@website.com。但是,如果您的用户名或密码包含特殊字符,则可能会失败。因此,在创建URL时,请确保对这些特殊字符进行编码。String username = URLEncoder.encode(user, StandardCharsets.UTF_8.toString());
String password = URLEncoder.encode(pass, StandardCharsets.UTF_8.toString());
String url = “http://“ + username + “:” + password + “@website.com”;
driver.get(url);
评论
选中此选项可处理警报/弹出窗口stackoverflow.com/questions/17066382/…我检查了很多替代方法,但没有用
哪些替代方法,请更具体。
我尝试使用具有和不具有Firefox Profile的login:password @ url进行身份验证///此外,我尝试使用''____String window1 = driver.getWindowHandle(); driver.findElement(By.cssSelector(“ input”))。sendKeys(login); _____''///和我尝试使用driver.switchTo()。alert()//来访问弹出窗口正常工作//始终将测试卡在加载地址中,并在屏幕上弹出窗口
应该更新此问题,以注意所显示的身份验证弹出窗口的类型。由于标记的解决方案不适用于所需的浏览器身份验证,因此弹出。