2012-01-05 65 views
0

使用Selenium Webdriver 2. java。Selenium web driver | java |無法在Firefox瀏覽器窗口之間切換

我想在兩個Firefox瀏覽器窗口之間切換回來。當我這樣做:org.openqa.selenium.NoSuchWindoException:無法loacate窗口「{accb1cc2-74c9-3b4e-8f71-c0b184a037c4}」;持續時間或超時:

這裏是java:

driver = new FirefoxDriver(); 
driver.get("http://mail.google.com"); 

String firstWindowHandle = driver.getWindowHandle(); 
System.out.println("handle of first window ="+firstWindowHandle); 
Thread.sleep(1000); 

driver = new FirefoxDriver(); 
driver.get("http://www.google.com"); 

// Get names of currently open windows 
String secondWindowHandle = driver.getWindowHandle(); 
System.out.println("handle of first window ="+secondWindowHandle); 
Thread.sleep(1000); 

// It fails right here! 
driver.switchTo().window(firstWindowHandle); 
driver.get("http://www.lifehacker.com"); 

它打印以下到控制檯: - 手柄的 - 第一窗口= {accb1cc2-74c9-3b4e-8f71-c0b184a037c4} 的手柄第二個窗口= {f5256619-a36e-a441-9979-937da0abacd1}

所有幫助表示讚賞。

回答

1

不幸的是,你不能在你正在嘗試這樣做的方式之間切換窗口 - 一旦你實例化一個新的實例,WebDriver就會丟失第一個窗口。

你可以嘗試通過JavaScript打開第二個窗口中,然後從它來回切換:

window.open('http://www.bing.com','Bing','modal=yes,alwaysRaised=yes') 

這是一個黑客位,並可能存在以下問題:

  • 彈出式窗口攔截器可能會阻止該動作
  • 瀏覽器必須啓用javascript
  • 未來的瀏覽器版本可能會破解黑客行爲
  • 抱怨,並從同行口中唸唸有詞(也許這是正確的),因爲即使它可能工作,它仍然是一個黑客;)

最後的一些想法:

有它必須是什麼特別的原因相同的驅動程序實例? 如果沒有,只有兩個驅動程序實例之間進行切換:活性視窗

FirefoxDriver driver = new FirefoxDriver(); 
driver.get("http://mail.google.com"); 

FirefoxDriver driver2 = new FirefoxDriver(); 
driver2.get("http://www.google.com"); 
0

Swtiching之間2:

FirefoxDriver wd=new FirefoxDriver(); 
    wd.get("https://irctc.co.in/"); 

    wd.manage().timeouts().implicitlyWait(5000,TimeUnit.SECONDS); 

    WebElement wb=wd.findElement(By.linkText("Cabs")); 
    wb.click(); //Now 2 Windows are open 

    wd.manage().timeouts().implicitlyWait(5000,TimeUnit.SECONDS); //Wait for the complete page to load 

    Set<String> sid=wd.getWindowHandles(); //getWindowHandles() method returns the ids of all active Windows and its return type will be a Collection Set. 

    Iterator<String> it=sid.iterator(); //Using iterator we can fetch the values from Set. 

String parentId=it.next(); 
System.out.println(parentId); 
String childId=it.next(); 
System.out.println(childId); 

wd.switchTo().window(childId); //swtiching control to child Window 

wd.close(); //控件返回到父窗口。

相關問題