如何在Selenium中处理身份验证弹出窗口?

如何在Selenium中处理身份验证弹出窗口?,selenium,selenium-webdriver,Selenium,Selenium Webdriver,请告诉我验证弹出窗口设置用户名和密码的代码 System.setProperty("webdriver.chrome.driver","Driver//chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.get("http://admin3-dev.ca.primus"); WebDriverWait wait = new WebDriverWait(driver, 10); Alert alert =

请告诉我验证弹出窗口设置用户名和密码的代码

System.setProperty("webdriver.chrome.driver","Driver//chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://admin3-dev.ca.primus");
WebDriverWait wait = new WebDriverWait(driver, 10);      


Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword("nsingh","Primus01"));

在上述代码的验证弹出窗口中未传递用户名和密码。请告诉我如何单击登录按钮。

我认为您必须使用Robot才能添加此类

class SmartRobot extends Robot {
 public SmartRobot() throws AWTException {
    super();
 }

public void pasteClipboard() {
    keyPress(KeyEvent.VK_CONTROL);
    keyPress(KeyEvent.VK_V);
    delay(50);
    keyRelease(KeyEvent.VK_V);
    keyRelease(KeyEvent.VK_CONTROL);
}

public void type(String text) {
    writeToClipboard(text);
    pasteClipboard();
}

private void writeToClipboard(String s) {
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable transferable = new StringSelection(s);
    clipboard.setContents(transferable, null);
}
}

在你的代码中改变这个

Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword("nsingh","Primus01"));
由此

driver.switchTo().alert();
SmartRobot robot = new SmartRobot();
robot.type(USERNAME);
robot.keyPress(KeyEvent.VK_TAB);
robot.type(PASSWORD);
robot.keyPress(KeyEvent.VK_ENTER);

我认为你必须使用机器人,你可以添加这个类

class SmartRobot extends Robot {
 public SmartRobot() throws AWTException {
    super();
 }

public void pasteClipboard() {
    keyPress(KeyEvent.VK_CONTROL);
    keyPress(KeyEvent.VK_V);
    delay(50);
    keyRelease(KeyEvent.VK_V);
    keyRelease(KeyEvent.VK_CONTROL);
}

public void type(String text) {
    writeToClipboard(text);
    pasteClipboard();
}

private void writeToClipboard(String s) {
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable transferable = new StringSelection(s);
    clipboard.setContents(transferable, null);
}
}

在你的代码中改变这个

Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword("nsingh","Primus01"));
由此

driver.switchTo().alert();
SmartRobot robot = new SmartRobot();
robot.type(USERNAME);
robot.keyPress(KeyEvent.VK_TAB);
robot.type(PASSWORD);
robot.keyPress(KeyEvent.VK_ENTER);

您可以直接在URL本身中传递用户名和密码,如下所示:-

driver.get("http://UserName:Password@yoururl.com");
请参阅以下链接:-


希望它能帮助您:)

您可以直接在URL中传递用户名和密码,如下所示:-

driver.get("http://UserName:Password@yoururl.com");
请参阅以下链接:-


希望它能帮助你:)

它在
chrome
中工作,仍然在寻找
firefox
浏览器

System.setProperty("webdriver.chrome.driver","Driver//chromedriver.exe");
        driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        driver.get("http://admin3-dev.magma.ca");


       Robot rb  =new Robot();
       rb.keyPress(KeyEvent.VK_P);
       rb.keyRelease(KeyEvent.VK_P);
       rb.keyPress(KeyEvent.VK_C);
       rb.keyRelease(KeyEvent.VK_C);
       rb.keyPress(KeyEvent.VK_H);
       rb.keyRelease(KeyEvent.VK_H);
       rb.keyPress(KeyEvent.VK_A);
       rb.keyRelease(KeyEvent.VK_A);
       rb.keyPress(KeyEvent.VK_L);
       rb.keyRelease(KeyEvent.VK_L);
       rb.keyPress(KeyEvent.VK_L);
       rb.keyRelease(KeyEvent.VK_L);  
       rb.keyPress(KeyEvent.VK_A);
       rb.keyRelease(KeyEvent.VK_A);

       rb.keyPress(KeyEvent.VK_TAB);
       rb.keyRelease(KeyEvent.VK_TAB);

       rb.keyPress(KeyEvent.VK_CAPS_LOCK);
       rb.keyRelease(KeyEvent.VK_CAPS_LOCK);
       rb.keyPress(KeyEvent.VK_A);
       rb.keyRelease(KeyEvent.VK_A);

       rb.keyPress(KeyEvent.VK_CAPS_LOCK);
       rb.keyRelease(KeyEvent.VK_CAPS_LOCK);
       rb.keyPress(KeyEvent.VK_M);
       rb.keyRelease(KeyEvent.VK_M);
       rb.keyPress(KeyEvent.VK_M);
       rb.keyRelease(KeyEvent.VK_M);
       rb.keyPress(KeyEvent.VK_U);
       rb.keyRelease(KeyEvent.VK_U);
       rb.keyPress(KeyEvent.VK_L);
       rb.keyRelease(KeyEvent.VK_L);
       rb.keyPress(KeyEvent.VK_U);
       rb.keyRelease(KeyEvent.VK_U);
       rb.keyPress(KeyEvent.VK_1);
       rb.keyRelease(KeyEvent.VK_1);
       rb.keyPress(KeyEvent.VK_2);
       rb.keyRelease(KeyEvent.VK_2);

       rb.keyPress(KeyEvent.VK_TAB);
       rb.keyRelease(KeyEvent.VK_TAB);
       rb.keyPress(KeyEvent.VK_ENTER);`enter code here`
       rb.keyRelease(KeyEvent.VK_ENTER);

它在
chrome
中工作,仍然在寻找
firefox
浏览器

System.setProperty("webdriver.chrome.driver","Driver//chromedriver.exe");
        driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        driver.get("http://admin3-dev.magma.ca");


       Robot rb  =new Robot();
       rb.keyPress(KeyEvent.VK_P);
       rb.keyRelease(KeyEvent.VK_P);
       rb.keyPress(KeyEvent.VK_C);
       rb.keyRelease(KeyEvent.VK_C);
       rb.keyPress(KeyEvent.VK_H);
       rb.keyRelease(KeyEvent.VK_H);
       rb.keyPress(KeyEvent.VK_A);
       rb.keyRelease(KeyEvent.VK_A);
       rb.keyPress(KeyEvent.VK_L);
       rb.keyRelease(KeyEvent.VK_L);
       rb.keyPress(KeyEvent.VK_L);
       rb.keyRelease(KeyEvent.VK_L);  
       rb.keyPress(KeyEvent.VK_A);
       rb.keyRelease(KeyEvent.VK_A);

       rb.keyPress(KeyEvent.VK_TAB);
       rb.keyRelease(KeyEvent.VK_TAB);

       rb.keyPress(KeyEvent.VK_CAPS_LOCK);
       rb.keyRelease(KeyEvent.VK_CAPS_LOCK);
       rb.keyPress(KeyEvent.VK_A);
       rb.keyRelease(KeyEvent.VK_A);

       rb.keyPress(KeyEvent.VK_CAPS_LOCK);
       rb.keyRelease(KeyEvent.VK_CAPS_LOCK);
       rb.keyPress(KeyEvent.VK_M);
       rb.keyRelease(KeyEvent.VK_M);
       rb.keyPress(KeyEvent.VK_M);
       rb.keyRelease(KeyEvent.VK_M);
       rb.keyPress(KeyEvent.VK_U);
       rb.keyRelease(KeyEvent.VK_U);
       rb.keyPress(KeyEvent.VK_L);
       rb.keyRelease(KeyEvent.VK_L);
       rb.keyPress(KeyEvent.VK_U);
       rb.keyRelease(KeyEvent.VK_U);
       rb.keyPress(KeyEvent.VK_1);
       rb.keyRelease(KeyEvent.VK_1);
       rb.keyPress(KeyEvent.VK_2);
       rb.keyRelease(KeyEvent.VK_2);

       rb.keyPress(KeyEvent.VK_TAB);
       rb.keyRelease(KeyEvent.VK_TAB);
       rb.keyPress(KeyEvent.VK_ENTER);`enter code here`
       rb.keyRelease(KeyEvent.VK_ENTER);

我在项目中遇到了身份验证代理弹出问题。所以我尝试了下面的解决方案,效果很好。 当我们在安全环境中从SeleniumWeb驱动程序运行脚本时,需要执行以下设置来处理身份验证代理

首先,您需要了解以下详细信息

  • network.proxy.autoconfig\u url(示例:)
  • network.proxy.http(示例:abc proxy.com)
  • network.proxy.http_端口(示例:8080)


我在项目中遇到了身份验证代理弹出问题。所以我尝试了下面的解决方案,效果很好。 当我们在安全环境中从SeleniumWeb驱动程序运行脚本时,需要执行以下设置来处理身份验证代理

首先,您需要了解以下详细信息

  • network.proxy.autoconfig\u url(示例:)
  • network.proxy.http(示例:abc proxy.com)
  • network.proxy.http_端口(示例:8080)


不同的浏览器有不同的解决方案,但很少有编程解决方案适用于所有浏览器

  • 某些Web驱动程序(Chrome、Firefox)可以使用用户:pass@siteURL中的语法。有些人会在注册表黑客攻击后接受这种语法,但会遇到稳定性问题(IE)
  • 某些Web驱动程序允许您在其配置文件(Firefox)中设置首选项
  • 某些Web驱动程序允许您使用扩展(Chrome)设置和修改其行为
  • 某些Web驱动程序允许您通过
    警报与身份验证对话框进行交互。身份验证使用
    (仅在撰写本文时使用IE)
  • 在撰写本文时,某些浏览器的Web驱动程序无法执行上述任何操作(Edge)
除了使用第三方GUI自动化框架之外,在所有浏览器中都应该使用的是设置一个代理,该代理可以添加基本身份验证头或任意头(例如,),并通过它将浏览器设置为代理


另请参阅与之链接的答案。

对于不同的浏览器,有不同的解决方案,但很少有编程解决方案适用于所有浏览器

  • 某些Web驱动程序(Chrome、Firefox)可以使用用户:pass@siteURL中的语法。有些人会在注册表黑客攻击后接受这种语法,但会遇到稳定性问题(IE)
  • 某些Web驱动程序允许您在其配置文件(Firefox)中设置首选项
  • 某些Web驱动程序允许您使用扩展(Chrome)设置和修改其行为
  • 某些Web驱动程序允许您通过
    警报与身份验证对话框进行交互。身份验证使用
    (仅在撰写本文时使用IE)
  • 在撰写本文时,某些浏览器的Web驱动程序无法执行上述任何操作(Edge)
除了使用第三方GUI自动化框架之外,在所有浏览器中都应该使用的是设置一个代理,该代理可以添加基本身份验证头或任意头(例如,),并通过它将浏览器设置为代理


另请参阅与此链接的答案。

如果是新窗口或iframe,您可能必须切换到警报窗口。我已使用robot类处理此情况,当您运行脚本时,请不要触摸鼠标和键盘。如果是新窗口或iframe,您可能必须切换到警报窗口。我已通过使用robot类,运行脚本时请不要触摸鼠标和键盘。它不工作。请告诉我FF的其他选项。它不起作用。请告诉我FF的其他选择。