java - 在 URL 中嵌入凭据不适用于 selenium 和 chrome
问题描述
我正在使用 selenium 对正在开发的 UI 进行自动化测试,但由于身份验证,我一直试图访问该站点。我看到您可以在 URL 中嵌入凭据进行身份验证,例如“ http://admin:admin@blah.com ”,但我尝试使用 Selenium 驱动程序作为 driver.get(" http://admin:admin@blah.com ") 但它不起作用并且弹出窗口仍在出现。我还尝试使用 Alert 作为 driver.switchTo().alert() 来抓取该弹出窗口,但它说没有警报。我什至包括了一个网络等待警报,在浏览器中我可以清楚地看到弹出窗口在那里但无济于事。我什至尝试使用 Java Robot 来编写凭据,但没有
我看到您可以使用 AutoIT 或 Sikuli 等第三方软件,但我只是想知道是否有特定方法可以使用 selenium 驱动程序进行此类身份验证?
在此先感谢您的帮助!
编辑1:
好的,多亏了Taylor的建议,我设法通过添加代码来处理警报,让它在 firefox 浏览器上运行:
Alert alert=driver.switchTo().alert();
alert.sendKeys(user+Keys.TAB+pass+Keys.TAB);
alert.accept();
driver.switchTo().defaultContent();
使用该代码,我设法发送用户名和密码进行身份验证,但对于 chrome,它不起作用。我尝试在几个站点上进行研究,但对每个人都有效的唯一答案是将凭据嵌入到 URL 中,如上所述,这对我不起作用。一个类似的链接是Selenium 无法接受 google chrome [java]发出的警报,但我不想忽略警报,因为我需要在那里输入凭据。任何其他帮助将不胜感激!
解决方案
因此,根据我的阅读,我认为问题出在 chrome 驱动程序本身,因为它实际上无法识别警报存在,但 Firefox 驱动程序可以。根据我一直在查看的内容,一个驱动程序支持某些东西,而另一个驱动程序支持其他东西,例如,您可以从 chrome 获取浏览器日志,但不能从 firefox 获取浏览器日志,您可以从 Firefox 获取警报,但不能从 chrome 获取。
我为此找到了转机。在 URL 中嵌入凭据不起作用,因为凭据本身不是针对我正在测试的页面,而是针对需要身份验证的页面执行的 REST API 调用。一旦我弄清楚这一点,我现在就使用驱动程序进行两次调用:第一次使用嵌入到 REST 调用的 URL 中的凭据,以便页面进行缓存和重用;第二个是页面本身,现在加载时没有警报。
希望这对其他人有帮助!
推荐阅读
- r - 旋转 ggplot 地图,使北向左而不是向上
- ios - Grand Central Dispatch:当队列超载时会发生什么?
- python - 如何根据另一列中的值将值移动到新列中
- r - 扩展在 R 包 simr 中不显示效果
- java - 了解 CopyOnWriteArrayList 中的快照
- java - 如何避免从 JPA 实体中保存截断的数据
- discrete-mathematics - 使用双射规则计算具有偶校验的二进制字符串
- amazon-web-services - CloudWatch 到 SNS:如何为 SNS 订阅过滤设置消息属性?
- azure - 在 Azure 中调试 asp .NET Core 5 beta
- android - 离线 Android Gradle 插件