2015-09-25 1370 views
0

我想了解使用Selenium WebDriver「在多個窗口之間切換」,但是因爲我無法使用driver.get()或driver.navigate.to()打開多個窗口, ,打開SAME窗口中的鏈接。有人可以幫助我使用相同的驅動程序實例打開多個窗口嗎? 我提供了我的示例代碼。在同一個窗口中,n的值是1而不是2。 請幫忙。如何使用Selenium WebDriver打開多個窗口

public class MultipleWindows { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     WebDriver driver = new FirefoxDriver(); 

     driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 


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

     driver.navigate().to("http://www.facebook.com"); 


     int n = driver.getWindowHandles().size(); 
     System.out.println(n); 

    } 

} 

回答

1

webdriver的navigate().to()get()做同樣的事情。有沒有API來打開一個新窗口,但您可以使用ctrl+n熱鍵:

WebDriver driver = new FirefoxDriver(); 
    WebElement body = driver.findElement(By.tagName("body")); 
    body.sendKeys(Keys.chord(Keys.CONTROL, "n")); 
    System.out.println(driver.getWindowHandles().size()); 
    driver.quit(); 

或者你可以使用的webdriver的少數情況(見Selenium Java open new window, close it, and control main window again

+0

感謝您的回覆。 – Sam

+0

還有一個疑問,有沒有辦法用特定的URL打開新窗口,比如facebook.com? TIA – Sam

+1

沒有什麼特別的,當你打開新窗口時,你可以簡單地使用'get()'給serf指定一個特定的url。並使用'switchTo()。window(winHandle)'在窗口之間切換。 –

2

這也將做

這將創建一個新的標籤/窗口並打開給定的URL

String url="whatever url or empty to open a empty tab"; 
((JavascriptExecutor) driver).executeScript("window.open(arguments[0])", url); 
0

另一種方式從there

 WebDriver driver = new ChromeDriver(); 
     driver.get(adminToolURL); 
     Set<String> windows = driver.getWindowHandles(); 
     String adminToolHandle = driver.getWindowHandle(); 
     ((JavascriptExecutor) driver).executeScript("window.open();"); 
     Set<String> customerWindow = driver.getWindowHandles(); 
     customerWindow.removeAll(windows); 
     String customerSiteHandle = ((String) customerWindow.toArray()[0]); 
     driver.switchTo().window(customerSiteHandle); 
     driver.get(customerSiteURL); 
     driver.switchTo().window(adminToolHandle); 

希望這會有所幫助!

相關問題