Rediff.comでサインイン部分を処理したいのですが、以下のコードはそのために機能しません。
driver.get("http://www.rediff.com/");
WebElement sign = driver.findElement(By.xpath("//html/body/div[3]/div[3]/span[4]/span/a"));
sign.click();
String myWindowHandle = driver.getWindowHandle();
driver.switchTo().window(myWindowHandle);
WebElement email_id= driver.findElement(By.xpath("//*[@id='signin_info']/a[1]"));
email_id.sendKeys("hi");
myWindowHandle
が正しい文字列でない場合、ポップアップウィンドウの名前が見つからないため、ポップアップウィンドウの名前を取得する方法を教えてください。
ポップアップウィンドウに切り替えるには、getWindowHandles()
を使用してそれらを反復処理する必要があります。
コードでは、getWindowHandle()
を使用しています。これにより、親ウィンドウ自体が提供されます。
String parentWindowHandler = driver.getWindowHandle(); // Store your parent window
String subWindowHandler = null;
Set<String> handles = driver.getWindowHandles(); // get all window handles
Iterator<String> iterator = handles.iterator();
while (iterator.hasNext()){
subWindowHandler = iterator.next();
}
driver.switchTo().window(subWindowHandler); // switch to popup window
// Now you are in the popup window, perform necessary actions here
driver.switchTo().window(parentWindowHandler); // switch back to parent window
http://rediff.com にサインインするという目標を持っていた上記のプログラムの解決策を見つけました
public class Handle_popupNAlert
{
public static void main(String[] args ) throws InterruptedException
{
WebDriver driver= new FirefoxDriver();
driver.get("http://www.rediff.com/");
WebElement sign = driver.findElement(By.xpath("//html/body/div[3]/div[3]/span[4]/span/a"));
sign.click();
Set<String> windowId = driver.getWindowHandles(); // get window id of current window
Iterator<String> itererator = windowId.iterator();
String mainWinID = itererator.next();
String newAdwinID = itererator.next();
driver.switchTo().window(newAdwinID);
System.out.println(driver.getTitle());
Thread.sleep(3000);
driver.close();
driver.switchTo().window(mainWinID);
System.out.println(driver.getTitle());
Thread.sleep(2000);
WebElement email_id= driver.findElement(By.xpath("//*[@id='c_uname']"));
email_id.sendKeys("hi");
Thread.sleep(5000);
driver.close();
driver.quit();
}
}
ポップアップウィンドウまたはアラートボックスを処理できます。
Alert alert = driver.switchTo().alert();
alert.accept();
警告ボックスを拒否することもできます。
Alert alert = driver.switchTo().alert();
alert().dismiss();
Webブラウザのポップアップアラートメッセージボックスが表示されたら、コード内で次のコードを使用できます。
// Accepts (Click on OK) Chrome Alert Browser for RESET button.
Alert alertOK = driver.switchTo().alert();
alertOK.accept();
//Rejects (Click on Cancel) Chrome Browser Alert for RESET button.
Alert alertCancel = driver.switchTo().alert();
alertCancel.dismiss();
状況を複雑にしないでください。使用可能であれば、ID
を使用します。
driver.get("http://www.rediff.com");
WebElement sign = driver.findElement(By.linkText("Sign in"));
sign.click();
WebElement email_id= driver.findElement(By.id("c_uname"));
email_id.sendKeys("hi");
ToastrメッセージがFirefoxの画面にポップアップ表示されたとき。以下のタグは、火災のバグで表示されました。
<div class="toast-message">Invalid Credentials, Please check Password</div>.
その時にスクリーンショットを撮りました。また、Selenium Javaコードで以下の変更を行いました。
String alertText = "";
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("toast-message")));
WebElement toast1 = driver.findElement(By.className("toast-message"));
alertText = toast1.getText();
System.out.println( alertText);
そして、toastrポップアップの私の問題は解決しました。
String parentWindowHandler = driver.getWindowHandle(); // Store your parent window
String subWindowHandler = null;
Set<String> handles = driver.getWindowHandles(); // get all window handles
Iterator<String> iterator = handles.iterator();
subWindowHandler = iterator.next();
driver.switchTo().window(subWindowHandler); // switch to popup window
// Now you are in the popup window, perform necessary actions here
driver.switchTo().window(parentWindowHandler); // switch back to parent window