web-dev-qa-db-ja.com

Selenium WebDriverを使用してログインポップアップウィンドウを処理する方法

Selenium Webdriverを使用してログインポップアップウィンドウを処理する方法ここにサンプル画面を添付しました。このログインポップアップ/アラートウィンドウにユーザー名とパスワードを入力/入力するにはどうすればよいですか?

ありがとうございます。それでは、お元気で、 enter image description here

34
shiva oleti

URLリクエストでユーザー名とパスワードを送信するアプローチを使用します。

http://username:[email protected]

それで、より明確にするために。ユーザー名はusernameパスワードはpasswordで、残りはテストWebの通常のURLです

微調整を必要とせずに動作します。

サンプルJavaコード:

public static final String TEST_ENVIRONMENT = "the-site.com";
private WebDriver driver;

public void login(String uname, String pwd){
  String URL = "http://" + uname + ":" + pwd + "@" + TEST_ENVIRONMENT;
  driver.get(URL);
}

@Test
public void testLogin(){
   driver = new FirefoxDriver();
   login("Pavel", "UltraSecretPassword");
   //Assert...
}
37
Pavel Janicek

これは、Windows Server 2012およびIEで動作するはずです。

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

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

alert.Accept();
8
Wahab Majboor

これはWebDriver 3.0では非常に簡単です(現在はベータ版です)。

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

これがお役に立てば幸いです。

解決策:スレッドとロボットを使用したWindows Active Directory認証

Java Selenium Webdriverを使用したスレッドとロボットを使用して、WebサイトのWindows Active Directory認証プロセスを自動化しました。このロジックはFirefoxで正常に機能し、Chrome IEで動作します。何らかの理由でIEは認証ウィンドウがポップアップするときにWebdriverを強制終了しますが、ChromeおよびFirefoxはWebドライバが強制終了されるのを防ぎます。 t Safariなどの他のWebブラウザーで試してください。

//...
//Note: this logic works in Chrome and Firefox. It did not work in IE and I did not try Safari.
//...

//import relevant packages here

public class TestDemo {

    static WebDriver driver;

    public static void main(String[] args) {

        //setup web driver
        System.setProperty("webdriver.chrome.driver", "path to your chromedriver.exe");
        driver = new ChromeDriver();

        //create new thread for interaction with windows authentication window
        (new Thread(new LoginWindow())).start();                

        //open your url. this will Prompt you for windows authentication
        driver.get("your url");

        //add test scripts below ...
        driver.findElement(By.linkText("Home")).click();    
        //.....
        //.....
    }

    //inner class for Login thread    
    public class LoginWindow implements Runnable {

        @Override
        public void run() {
            try {
                login();
            } catch (Exception ex) {
                System.out.println("Error in Login Thread: " + ex.getMessage());
            }
        }

        public void login() throws Exception {

            //wait - increase this wait period if required
            Thread.sleep(5000);

            //create robot for keyboard operations
            Robot rb = new Robot();

            //Enter user name by ctrl-v
            StringSelection username = new StringSelection("username");
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);            
            rb.keyPress(KeyEvent.VK_CONTROL);
            rb.keyPress(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_CONTROL);

            //tab to password entry field
            rb.keyPress(KeyEvent.VK_TAB);
            rb.keyRelease(KeyEvent.VK_TAB);
            Thread.sleep(2000);

            //Enter password by ctrl-v
            StringSelection pwd = new StringSelection("password");
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd, null);
            rb.keyPress(KeyEvent.VK_CONTROL);
            rb.keyPress(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_V);
            rb.keyRelease(KeyEvent.VK_CONTROL);

            //press enter
            rb.keyPress(KeyEvent.VK_ENTER);
            rb.keyRelease(KeyEvent.VK_ENTER);

            //wait
            Thread.sleep(5000);
        }                        
    }      
}

これはPythonベースのSeleniumのソースコードを調べた後のソリューションです(- here )。この3つのステップが有用であることがわかりました。

obj = driver.switch_to.alert
obj.send_keys(keysToSend="username\ue004password")
obj.accept()

ここで、\ ue004は、ソースコードのKeysクラスにあるTABの値です。

同じ方法がJavaでも使用できますが、確実ではありません。

1
Devendra Bhat

次のSelenium-Webdriver Javaコードは、アラート/ポップアップウィンドウを処理するのに適しているはずです。

driver.switchTo().alert();
//Selenium-WebDriver Java Code for entering Username & Password as below:
driver.findElement(By.id("userID")).sendKeys("userName");
driver.findElement(By.id("password")).sendKeys("myPassword");
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();
0
Ripon Al Wasim

アラートに切り替え、authenticateUsingを使用してユーザー名とパスワードを設定し、親ウィンドウに戻るだけです

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

認証ポップアップを処理する最も簡単な方法は、Url Itselfに資格情報を入力することです。たとえば、Username: adminおよびPassword: admin

WebDriver driver = new ChromeDriver();
driver.get("https://admin:admin@your website url");
0
Raj

私は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);
        }
}
0
Shadi

これを処理する1つの方法として、URLでログインの詳細を提供できます。例えばURLが「 http:// localhost:404 」であり、アラートプロンプトメッセージで「ユーザー名」と「パスワード」を要求している場合、baseurlを「 http:// username :password @ localhost:404 "。うまくいけばいい

0
vikram k

アプリケーションが開くたびにWindowsセキュリティ警告が表示されていました。この問題を解決するには、次の手順を使用しました

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

これにより、アプリケーションへのログインに関する問題が解決しました。これがWindowsセキュリティアラートの認証を探している人の助けになることを願っています。

0
Srinu Seela

Autoitツールを使用して、Windowsのすべてのアクティビティを処理することをお勧めします。 AutoItツールを使用してウィンドウタスクを処理するスクリプトを作成できます。その後、Seleniumを使用してそのexeを実行できます。

0
Arpan Saini

C#Selenium Web Driverでは、次のコードで動作させることができました。

var alert = TestDriver.SwitchTo().Alert();
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser + Keys.Tab + CurrentTestingConfiguration.Configuration.BasicAuthPassword);
alert.Accept();

似ているように見えますが、以下はFirefoxでは動作しませんでした(Keys.Tabはすべてのフォームをリセットし、パスワードはユーザーフィールド内に書き込まれます):

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);

System.NotImplementedException:「POST/session/38146c7c-cd1a-42d8-9aa7-1ac6837e64f6/alert/credentialsは既知のコマンドと一致しませんでした」

0
Alexei