2016-09-30 78 views
-2

我正在使用下面的代码来处理使用硒webdriver的多个窗口并获取"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/"); 
    } 
} 

这是我简单的代码,这是完美的谷歌浏览器工作正常。同样的代码,当我尝试在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()”方法返回值仅在设置。 –

相关问题