我尝试使用以下代码处理身份验证弹出窗口:
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 + "/");
当我执行测试时,页面显示身份验证弹出窗口,并且仍然加载直到我单击取消按钮。那一刻,我可以访问下一页,这意味着身份验证成功但仍然始终显示身份验证弹出窗口
答案 0 :(得分:40)
警报方法authenticateUsing()
可让您跳过 Http基本身份验证框。
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword(username, password));
截至 Selenium 3.4 ,它仍处于测试阶段
现在只对
执行InternetExplorerDriver
答案 1 :(得分:29)
不要使用firefox个人资料并尝试以下代码:
driver.get("http://UserName:Password@Example.com");
如果您在IE浏览器中实现它,则需要执行某些操作。
如果您的身份验证服务器需要域名为" domainuser"您需要在网址中添加双斜杠/
:
//localdomain\user:password@example.com
答案 2 :(得分:7)
我在申请中多次遇到过这个问题。
我们通常可以通过以下两种方法来解决这个问题。
在网址中传递用户名和密码
您可以在打开网址之前创建AutoIT脚本并调用脚本。
请查看以下两种方式的文章:
Handle Authentication/Login window in Selenium Webdriver
答案 3 :(得分:7)
尝试以下解决方案,如有任何问题,请与我联系:
driver.get('https://example.com/')
driver.switchTo().alert().sendKeys("username" + Keys.TAB + "password");
driver.switchTo().alert().accept();
这对我来说很好
答案 4 :(得分:3)
这应该适用于使用AutoAuth plugin:
的FirefoxFirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
File ffPluginAutoAuth = new File("D:\\autoauth-2.1-fx+fn.xpi");
firefoxProfile.addExtension(ffPluginAutoAuth);
driver = new FirefoxDriver(firefoxProfile);
答案 5 :(得分:2)
如果必须处理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);
答案 6 :(得分:2)
Selenium 4 支持使用 Basic 和 Digest auth 进行身份验证。它使用 CDP,目前仅支持 Chrome 衍生浏览器
Java 示例:
print(sum(i['qty']*i['price'] for i in a if i['side'] == 'Buy')/len(list(i for i in a if i['side'] == 'Buy')))
print(sum(i['qty']*i['price'] for i in a if i['side'] == 'Sell')/len(list(i for i in a if i['side'] == 'Sell')))
注意:在 Alpha-7 中存在错误,它发送用户名/密码的用户名。需要等待 selenium 版本的下一个版本,因为主干 https://github.com/SeleniumHQ/selenium/commit/4917444886ba16a033a81a2a9676c9267c472894
中有修复可用答案 7 :(得分:0)
普遍的解决方案是在URL中添加用户名和密码,例如http://username:password@website.com。但是,如果您的用户名或密码包含特殊字符,则可能会失败。因此,在创建URL时,请确保对这些特殊字符进行编码。
<!DOCTYPE html><title>Title</title><style>body {width: 500px;}</style>
<script type="application/javascript">function $init() {return true;}</script><body><p checked class="title" id='title'>Title</p><!-- here goes the rest of the page --></body>