Java 如何自动执行基本身份验证chrome警报
我试过几种方法来处理它,但没有一种有效Java 如何自动执行基本身份验证chrome警报,java,google-chrome,authentication,selenium-chromedriver,alert,Java,Google Chrome,Authentication,Selenium Chromedriver,Alert,我试过几种方法来处理它,但没有一种有效 https://user:password@pageaddress.com-不起作用,chrome启动控制bu自动测试软件,验证弹出窗口仍然出现 向Chrome arg添加--禁用闪烁功能=BlockCredentialedSubresources,并重复第1点-不起作用,原因与第1点相同 driver.switchTo().alert.authenticateSing(新用户和密码(用户,密码))-这里的驱动程序似乎没有看到警报,使用强制方法检查警报并返
https://user:password@pageaddress.com
-不起作用,chrome启动控制bu自动测试软件,验证弹出窗口仍然出现--禁用闪烁功能=BlockCredentialedSubresources
,并重复第1点-不起作用,原因与第1点相同driver.switchTo().alert.authenticateSing(新用户和密码(用户,密码))
-这里的驱动程序似乎没有看到警报,使用强制方法检查警报并返回false:
私人警报;
公共布尔值isAlertPresent(){
试一试{
waitForTimeout(10,时间单位秒);
alert=驱动程序.switchTo().alert();
返回true;
}捕获(NoAlertPresentException e){
返回false;
}}
Action()
触发键盘或鼠标事件也不起作用
chromedriver 2.31
谷歌Chrome 61版
还有其他想法吗?也许是js脚本 最后,我通过Robot框架完成了这项工作,这不是我引以为豪的解决方案,但我没有其他想法
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
private Robot robot;
public void login(String login, String password) {
copyValueFromClipboardToInput(login);
getRobot().keyPress(KeyEvent.VK_TAB);
getRobot().keyRelease(KeyEvent.VK_TAB);
copyValueFromClipboardToInput(password);
getRobot().keyPress(KeyEvent.VK_ENTER);
getRobot().keyRelease(KeyEvent.VK_ENTER);
}
private void copyValueFromClipboardToInput(String value) {
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(value), null);
getRobot().keyPress(KeyEvent.VK_CONTROL);
getRobot().keyPress(KeyEvent.VK_V);
getRobot().keyRelease(KeyEvent.VK_V);
getRobot().keyRelease(KeyEvent.VK_CONTROL);
}
private Robot getRobot() {
if (robot == null) {
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}
return robot;
}
我也有类似的经历。
但是,您可能不需要完整的本机消息传递API。。。
这些都是JavaScript,可以用于任何浏览器生成的身份验证请求(至少看起来是这样)
webRequest-and-有一个anAuthRequired事件。
你可以通过一个监听器连接到这一点,然后只需根据一些请求传入你需要的凭据
如果您只想传入不会更改的用户凭据,那么您需要使用同步方法—这要简单得多。事实上,这就是你所需要的一切
如果您需要传递不同的凭据,您可能需要研究异步方法,这是我必须使用的方法。
如果你使用的是chrome,忘记。。。但是Firefox应该与他们合作
希望这有帮助