Selenium webdriver 如何使用SeleniumWebDriver处理登录弹出窗口?

Selenium webdriver 如何使用SeleniumWebDriver处理登录弹出窗口?,selenium-webdriver,popup,alert,Selenium Webdriver,Popup,Alert,如何使用SeleniumWebDriver处理登录弹出窗口?我已经在这里附上了示例屏幕。如何在此登录弹出窗口/警报窗口中输入用户名和密码 谢谢和问候, 使用在URL请求中发送用户名和密码的方法: http://username:password@the-site.com 所以我想说得更清楚一点。用户名是usernamepassword是password,其余是测试网站的常用URL 适合我,不需要任何调整 示例Java代码: 公共静态最终字符串测试环境=“the site.com”; 私有网络驱

如何使用SeleniumWebDriver处理登录弹出窗口?我已经在这里附上了示例屏幕。如何在此登录弹出窗口/警报窗口中输入用户名和密码

谢谢和问候,
使用在URL请求中发送用户名和密码的方法:

http://username:password@the-site.com
所以我想说得更清楚一点。用户名是
username
password是
password
,其余是测试网站的常用URL

适合我,不需要任何调整

示例Java代码:

公共静态最终字符串测试环境=“the site.com”; 私有网络驱动程序; 公共无效登录(字符串uname、字符串pwd){ String URL=“http://”+uname+:“+pwd+”@”+测试环境; 获取(URL); } @试验 公共void testLogin(){ 驱动程序=新的FirefoxDriver(); 登录(“Pavel”、“UltraSecretPassword”); //断言。。。 }
您可以使用此Autoit脚本处理登录弹出窗口:

WinWaitActive("Authentication Required","","10")
If WinExists("Authentication Required") Then
Send("username{TAB}")
Send("Password{Enter}")
EndIf'

以下Selenium Webdriver Java代码应能很好地处理警报/弹出窗口:

driver.switchTo().alert();
//用于输入用户名和密码的Selenium WebDriver Java代码,如下所示:
driver.findElement(By.id(“userID”)).sendKeys(“用户名”);
driver.findElement(By.id(“密码”)).sendKeys(“我的密码”);
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();

解决方案:使用线程和机器人进行Windows active directory身份验证

我使用Java线程和机器人以及SeleniumWebDriver来自动化我们网站的windows active directory身份验证过程。 这种逻辑在Firefox和Chrome中运行良好,但在IE中不起作用。出于某种原因,IE会在弹出身份验证窗口时杀死web驱动程序,而Chrome和Firefox则会阻止web驱动程序被杀死。我没有尝试其他网络浏览器,比如Safari

/。。。
//注意:这个逻辑在Chrome和Firefox中有效。它在IE中不起作用,我也没有尝试Safari。
//...
//在此处导入相关包
公共类测试演示{
静态网络驱动程序;
公共静态void main(字符串[]args){
//安装web驱动程序
System.setProperty(“webdriver.chrome.driver”,“chromedriver.exe的路径”);
驱动程序=新的ChromeDriver();
//创建与windows身份验证窗口交互的新线程
(新线程(新登录窗口()).start();
//打开您的url。这将提示您进行windows身份验证
获取(“你的url”);
//在下面添加测试脚本。。。
driver.findElement(By.linkText(“Home”))。单击();
//.....
//.....
}
//登录线程的内部类
公共类LoginWindow实现可运行{
@凌驾
公开募捐{
试一试{
登录();
}捕获(例外情况除外){
System.out.println(“登录线程中的错误:+ex.getMessage());
}
}
public void login()引发异常{
//等待-如果需要,增加此等待时间
睡眠(5000);
//创建用于键盘操作的机器人
Robot rb=新机器人();
//按ctrl-v键输入用户名
StringSelection用户名=新StringSelection(“用户名”);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(用户名,null);
rb.keyPress(KeyEvent.VK_控件);
rb.keyPress(KeyEvent.VK_V);
rb.keyrease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_控件);
//“密码输入”字段的选项卡
rb.keyPress(KeyEvent.VK_选项卡);
rb.keyRelease(KeyEvent.VK_选项卡);
《睡眠》(2000年);
//通过ctrl-v输入密码
StringSelection pwd=新的StringSelection(“密码”);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd,null);
rb.keyPress(KeyEvent.VK_控件);
rb.keyPress(KeyEvent.VK_V);
rb.keyrease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_控件);
//按回车键
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_输入);
//等等
睡眠(5000);
}                        
}      
}

这应该适用于windows server 2012和IE

var alert = driver.SwitchTo().Alert();

alert.SetAuthenticationCredentials("username", "password");

alert.Accept();

这在WebDriver 3.0中是非常简单的(到目前为止,它是Beta版)


希望这能有所帮助。

我使用IE,然后创建这样的代码,并在修改几个代码后工作:

       public class TestIEBrowser {
                          public static void main(String[] args) throws Exception {
               //Set path of IEDriverServer.exe.
              // Note : IEDriverServer.exe should be In D: drive.
              System.setProperty("webdriver.ie.driver", "path /IEDriverServer.exe");

              // Initialize InternetExplorerDriver Instance.
              WebDriver driver = new InternetExplorerDriver();

              // Load sample calc test URL.
              driver.get("http://...  /");

              //Code to handle Basic Browser Authentication in Selenium.
              Alert aa = driver.switchTo().alert();

              Robot a = new Robot();
              aa.sendKeys("host"+"\\"+"user");  

              a.keyPress(KeyEvent.VK_TAB);
              a.keyRelease(KeyEvent.VK_TAB);
              a.keyRelease(KeyEvent.VK_ADD);                

              setClipboardData("password");

              a.keyPress(KeyEvent.VK_CONTROL);
              a.keyPress(KeyEvent.VK_V);
              a.keyRelease(KeyEvent.VK_V);
              a.keyRelease(KeyEvent.VK_CONTROL);
              //Thread.sleep(5000);
              aa.accept();        




    }

             private static void setClipboardData(String string) {
            // TODO Auto-generated method stub
                        StringSelection stringSelection = new StringSelection(string);                            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
        }
}

每当我的应用程序打开时,我都会收到windows安全警报。为了解决这个问题,我使用了以下步骤

import org.openqa.selenium.security.UserAndPassword;
UserAndPassword UP = new UserAndPassword("userName","Password");
driver.switchTo().alert().authenticateUsing(UP);

这解决了我登录应用程序的问题。我希望这可能会帮助所有希望验证windows安全警报的用户。

只需切换到警报,然后使用
authenticateSing
设置usename和密码,然后返回父窗口

Alert Windowalert = driver.switchTo().alert() ;
Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ; 

处理此问题的一种方法是,您可以使用url提供登录详细信息。e、 g.如果您的url为“”,并且在警报提示消息中询问“用户名”和“密码”,则您可以将baseurl传递为“”。
希望它能工作

这是一个基于Python的selenium解决方案,在阅读了源代码()之后。 我发现这三个步骤很有用

obj = driver.switch_to.alert
obj.send_keys(keysToSend="username\ue004password")
obj.accept()
此处\ue004是TAB的值,您可以在源代码的Keys类中找到该值

我想同样的方法也可以在JAVA中使用,但不确定。

在C#Selenium Web驱动程序中,我已经成功地使用了以下代码:

var alert = TestDriver.SwitchTo().Alert();
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser + Keys.Tab + CurrentTestingConfiguration.Configuration.BasicAuthPassword);
alert.Accept();
虽然看起来类似,但以下内容不适用于Firefox(Keys.Tab重置所有表单,密码将写入用户字段):

此外,我尝试了以下导致异常的解决方案:

var alert = TestDriver.SwitchTo().Alert();
alert.SetAuthenticationCredentials(
   CurrentTestingConfiguration.Configuration.BasicAuthUser,
   CurrentTestingConfiguration.Configuration.BasicAuthPassword);
System.NotImplementedException:'发布 /会话/38146c7c-cd1a-42d8-9aa7-1ac6837e64f6/alert/credentials did 与已知命令“”不匹配
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser);
alert.SendKeys(Keys.Tab);
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthPassword);
var alert = TestDriver.SwitchTo().Alert();
alert.SetAuthenticationCredentials(
   CurrentTestingConfiguration.Configuration.BasicAuthUser,
   CurrentTestingConfiguration.Configuration.BasicAuthPassword);
WebDriver driver = new ChromeDriver();
driver.get("https://admin:admin@your website url");
    Webdriver driver = new ChromeDriver();
    
    ((HasAuthentication) driver).register(UsernameAndPassword.of("username", "pass"));

    driver.get("http://sitewithauth");
    
 
import org.apache.http.client.utils.URIBuilder;

driver.get(...webapp_location...);
wait.until(ExpectedConditions.urlContains(...sso_server...));

URIBuilder uri = null;
try {
    uri = new URIBuilder(driver.getCurrentUrl());
} catch (URISyntaxException ex) {
    ex.printStackTrace();
}
uri.setUserInfo(username, password);
driver.navigate().to(uri.toString());