5.8ポップアップダイアログの処理

7545 ワード

JavaScriptには、3つのポップアップダイアログボックスAlert、Confirmation、およびProptがあります.
Alert:ヒントダイアログでは、「確定」ボタンしかありません.(対応するJavaScriptコードは「Alert(')」です.)
Confirmation:確認ダイアログでは、選択が必要です.
Prompt:入力ダイアログでは、内容を入力する必要があります(対応するJavaScriptコードは「prompt('これがprompt'、')」).
Selenium 1はJavaScript注入方式で試験を行うため、JavaScriptポップアップダイアログを直接処理するのではなく、ポップアップダイアログを「前処理」します.したがって、手動テストでダイアログが表示されるところでは、Selenium 1を使ってテストするときにJavaScriptがダイアログをイジェクトしないというのは、イジェクト前にすでに「処理」されているからです.
しかし、Selenium 2は、測定されたWebアプリケーションに組み込まれたJavaScriptの代わりに、各ブラウザに対して開発された.ブラウザとの緊密な統合は、JavaScriptセキュリティモデルによる制限を回避するために、より高度なテストの作成をサポートします.したがって、ダイアログをイジェクトすると成功します.
Selenium 1では、異なるポップアップダイアログに対して異なる方法を呼び出す必要がありますが、Selenium 2では、ポップアップダイアログはAlertオブジェクトとして統一され、Alertオブジェクトを呼び出す方法だけでいいです.
現在のウェブサイトでは上記の3つのポップアップダイアログが付いたページを見つけにくいので、ここで自分でホームページを作ることができます.まずテキストファイルを作成し、プログラムリスト5-57に示すコードを入力します.
<html>
<head>
<title></title>
</head>
<body>
<input type="button" onclick="alert('  Alert');" value="Alert"/>
<br/>
<input type="button" onclick="confirm('  Confirmation');" value="Confirmation"/>
<br/>
<input type="button" onclick="prompt('   Prompt','');" value="prompt"/>
</body>
</html>
ファイルを保存してtestPageと名前を変えてブラウザで開き、異なるボタンをクリックすると、対応するポップアップダイアログが表示されます.このページでテストします.
1  Accept()
ポップアップダイアログの確認ボタンをクリックして、Alert、Confirmation、Promptを同時に使うことができます.
これらのボタンをクリックして、各種のダイアログを表示し、クリックします.よく見えるように、クリック操作の後に3秒の遅延が追加されました.
public static void main(String[] args) throws InterruptedException {
//        ,    System.setProperty  firefox.exe   
//System.setProperty("webdriver.firefox.bin","D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
WebDriver driver = new FirefoxDriver();
Navigation navigation = driver.navigate();
navigation.to("C:\\Users\\Administrator\\Desktop\\testPage.html");
WebElement btn = driver.findElement(By.xpath("//input[1]"));
btn.click();
Thread.sleep(3000);
driver.switchTo().alert().accept();
WebElement btn2 = driver.findElement(By.xpath("//input[2]"));
btn2.click();
Thread.sleep(3000);
driver.switchTo().alert().accept();
WebElement btn3 = driver.findElement(By.xpath("//input[3]"));
btn3.click();
Thread.sleep(3000);
driver.switchTo().alert().accept();
}
コードを実行すると、ページ上でAlert、Confirmation、およびProptダイアログが順次表示され、確定ボタンをクリックしたことが分かります.
2  Displass()
ポップアップダイアログのキャンセルボタンをクリックして、Alert、Confirmation、およびPromptを同時に使うことができます.しかし、AlertにとってAccept()とDismiss()はあまり区別がないので、Displass()を使う必要はありません.
これらのボタンをクリックして、各種のダイアログを表示し、クリックします.よく見えるように、クリック操作の後に3秒の遅延が追加されました.
public static void main(String[] args) throws InterruptedException {
//        ,    System.setProperty  firefox.exe   
//System.setProperty("webdriver.firefox.bin","D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
WebDriver driver = new FirefoxDriver();
Navigation navigation = driver.navigate();
navigation.to("C:\\Users\\Administrator\\Desktop\\testPage.html");
WebElement btn2 = driver.findElement(By.xpath("//input[2]"));
btn2.click();
Thread.sleep(3000);
driver.switchTo().alert().dismiss();
WebElement btn3 = driver.findElement(By.xpath("//input[3]"));
btn3.click();
Thread.sleep(3000);
driver.switchTo().alert().dismiss();
}
3  SendKeys(keys ToSend)
ポップアップダイアログボックスにテキストを入力します.この方法はProptポップアップダイアログにのみ有効です.
「Prompt」ボタンをクリックして、Promptポップアップダイアログを表示し、テキストを入力します.
WebDriver driver = new FirefoxDriver();
Navigation navigation = driver.navigate();
navigation.to("C:\\Users\\Administrator\\Desktop\\testPage.html");
WebElement btn3 = driver.findElement(By.xpath("//input[3]"));
btn3.click();
driver.switchTo().alert().sendKeys("        ");
4  Text/get Text()
Text/get Text()は、ポップアップダイアログのテキストコンテンツを取得するために使用されます.
これらのボタンをクリックして、各種ポップアップダイアログを開き、クリックしながらテキストの内容を出力します.
WebDriver driver = new FirefoxDriver();
Navigation navigation = driver.navigate();
navigation.to("C:\\Users\\Administrator\\Desktop\\testPage.html");
WebElement btn = driver.findElement(By.xpath("//input[1]"));
btn.click();
System.out.println(driver.switchTo().alert().getText());
driver.switchTo().alert().accept();
WebElement btn2 = driver.findElement(By.xpath("//input[2]"));
btn2.click();
System.out.println(driver.switchTo().alert().getText());
driver.switchTo().alert().accept();
WebElement btn3 = driver.findElement(By.xpath("//input[3]"));
btn3.click();
System.out.println(driver.switchTo().alert().getText());
driver.switchTo().alert().accept();
1、alert弾き枠
このようなポップアップ枠の処理は難しくないはずです.インターネットでも多くの紹介があります.ここで一つの方法を提供します.コードを参照してください.
プログラムリスト
//     1 alert(javascript   )
public boolean dealPotentialAlert(WebDriver driver,boolean option) {
//    
boolean flag = false;
//    
try {
    Alert alert = driver.switchTo().alert();
    //      alert  
    if (null == alert){
        throw new NoAlertPresentException();
    }
    //    
    try {
        //  or  
        if (option) {
            //  
            alert.accept();
            System.out.println("Accept the alert: " + alert.getText());
        } else {
            //  
            alert.dismiss();
            System.out.println("Dismiss the alert: " + alert.getText());
        }
        flag = true;
    } catch (WebDriverException e) {
        if (e.getMessage().startsWith("Could not find")){
            System.out.println("There is no alert appear!");
        }else{
            throw e;
        }
    }
} catch (NoAlertPresentException e) {
    System.out.println("There is no alert appear!");
}
return flag;
}
2、非alert弾き枠
JSカスタムのポップアップボックスであれ、windowsのポップアップボックスであれ、以下に示す方法は正確に位置決めできます.
//     alert  
public static boolean testNewWindows(WebDriver driver){
//      
String currentHandle = driver.getWindowHandle();
//         
Set<String> handles = driver.getWindowHandles();
//       
handles.remove(currentHandle);
//    
if (handles.size() > 0) {
    try{
    //    
        dr.switchTo().window(handles.iterator().next());
        return true;
    }catch(Exception e){
        System.out.println(e.getMessage());
        return false;
    }
}
System.out.println("Did not find window");
return false;
}
 
//     alert  
public static boolean testNewWindow(WebDriver driver){
    try{
        //    
        driver.switchTo().window(driver.getWindowHandles().iterator().next());
        return true;
    }catch(Exception e){
        System.out.println(e.getMessage());
        return false;
    }
}