Selenium Webdriverを使用してログインポップアップウィンドウを処理する方法ここにサンプル画面を添付しました。このログインポップアップ/アラートウィンドウにユーザー名とパスワードを入力/入力するにはどうすればよいですか?
ありがとうございます。それでは、お元気で、
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...
}
これは、Windows Server 2012およびIEで動作するはずです。
var alert = driver.SwitchTo().Alert();
alert.SetAuthenticationCredentials("username", "password");
alert.Accept();
これは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でも使用できますが、確実ではありません。
次の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();
アラートに切り替え、authenticateUsing
を使用してユーザー名とパスワードを設定し、親ウィンドウに戻るだけです
Alert Windowalert = driver.switchTo().alert() ;
Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ;
認証ポップアップを処理する最も簡単な方法は、Url Itselfに資格情報を入力することです。たとえば、Username: admin
およびPassword: admin
:
WebDriver driver = new ChromeDriver();
driver.get("https://admin:admin@your website url");
私は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);
}
}
これを処理する1つの方法として、URLでログインの詳細を提供できます。例えばURLが「 http:// localhost:404 」であり、アラートプロンプトメッセージで「ユーザー名」と「パスワード」を要求している場合、baseurlを「 http:// username :password @ localhost:404 "。うまくいけばいい
アプリケーションが開くたびにWindowsセキュリティ警告が表示されていました。この問題を解決するには、次の手順を使用しました
import org.openqa.Selenium.security.UserAndPassword;
UserAndPassword UP = new UserAndPassword("userName","Password");
driver.switchTo().alert().authenticateUsing(UP);
これにより、アプリケーションへのログインに関する問題が解決しました。これがWindowsセキュリティアラートの認証を探している人の助けになることを願っています。
Autoitツールを使用して、Windowsのすべてのアクティビティを処理することをお勧めします。 AutoItツールを使用してウィンドウタスクを処理するスクリプトを作成できます。その後、Seleniumを使用してそのexeを実行できます。
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は既知のコマンドと一致しませんでした」