2016-09-30 9 views
-2

以下のコードを使用して、複数のウィンドウを処理しています("java.lang.ArrayIndexOutOfBoundsException"は例外です)。以下の簡単なコードを確認してください:Webdriverを使用して複数のウィンドウを処理する際に "java.lang.ArrayIndexOutOfBoundsException"例外が発生しました

public class Window_handling { 
    WebDriver driver; 
    WebDriverWait wait=null; 
    String baseurl= "http://www.w3schools.com/html/html_links.asp"; 

    @BeforeClass 
    public void beforeClass() { 
     //System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe"); 
     //driver=new ChromeDriver(); 
     driver=new FirefoxDriver(); 

     driver.get(baseurl); 
     driver.manage().window().maximize(); 
     wait=new WebDriverWait(driver, 5); 
    } 

    @Test 
    private void multiple_windowhandle() throws InterruptedException{ 
     //parent pop-up 
     System.out.println("window size is ="+driver.getWindowHandles().size()); 
     String parent=driver.getWindowHandle(); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Exercise 1 »"))); 
     driver.findElement(By.linkText("Exercise 1 »")).click(); 
     Thread.sleep(5000); 
     //handling first pop-up 
     System.out.println("window size is ="+driver.getWindowHandles().size()); 
     Set<String> set=driver.getWindowHandles(); 
     set.remove(parent); 

     String win2=(String)set.toArray()[0]; 
     Thread.sleep(5000); 
     //handling second pop-up 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Exercise 2 »"))); 
     driver.findElement(By.linkText("Exercise 2 »")).click(); 
     System.out.println("window size is ="+driver.getWindowHandles().size()); 
     set=driver.getWindowHandles(); 
     set.remove(parent); 
     set.remove(win2); 
     String win3=(String)set.toArray()[0]; 
     Thread.sleep(5000); 
     driver.switchTo().window(win3); 
     driver.get("http://www.google.com/"); 
    } 
} 

これは私の簡単なコードです。これはGoogle Chromeでも問題なく動作します。 firefoxで試行しているときに同じコードを入力してください。これは、行番号53の例外"java.lang.ArrayIndexOutOfBoundsException"以下です。

誰でもこの問題を解決できますか?

+0

私たちにライン#53を見せてください。 – BVengerov

+0

あなたの返事をありがとう、ここに行番号53です:String win3 =(String)set.toArray()[0]; –

+0

動作は同じですか?つまり、すべてのポップアップがFFのポップアップとして開きますか? – BVengerov

答えて

0

私はこの質問が投票された理由を知りません。しかし、適切な行番号情報を与えることができました。とにかく、可能性のある問題は、親からのウィンドウタイトル、win2とwin3のいずれかが同じで、Setが重複値を格納することを許可していないということです。あなたのコードでは、remove()メソッドは予期されたものを削除し、空の配列に変換します。重複したフィルタの問題を避けるために、代わりにArrayListを使用する方がよいでしょう。

+0

こんにちはHarish、ご意見ありがとうございますが、 "getWindowHandles()"メソッドはSetの値を返すため、動作しません。 –

関連する問題