2012-12-18 63 views

回答

15

使用

以下方法切换到模式框架

driver.switchTo().frame("ModelFrameTitle"); 

driver.switchTo().activeElement() 

希望这将工作

+0

我已经尝试过两种方法,但没有一个能够正常工作。你可以试试看,并让我知道 –

+2

@ Jasmine.Olivra,你已经接受了答案,但同时表示“*没有这个工作*”。它是否适合你? –

+0

我在python中做同样的事情,但我的声明是:driver.switch_to_window(activeElement())....但是我收到错误:driver.switch_to_window(activeElement())。你能提供任何提示吗? – engineer

0

试试这个代码,包括你的对象名称&变量工作。

Set<String> windowids = driver.getWindowHandles(); 
Iterator<String> iter= windowids.iterator(); 
for (int i = 1; i < sh.getRows(); i++) 
{ 
while(iter.hasNext()) 
{ 
System.out.println("Main Window ID :"+iter.next()); 
} 
driver.findElement(By.id("lgnLogin_UserName")).clear(); 
driver.findElement(By.id("lgnLogin_UserName")).sendKeys(sh.getCell(0, 
i).getContents()); 
driver.findElement(By.id("lgnLogin_Password")).clear(); 
driver.findElement(By.id("lgnLogin_Password")).sendKeys(sh.getCell(1, 
i).getContents()); 
driver.findElement(By.id("lgnLogin_LoginButton")).click(); 
Thread.sleep(5000L); 
      windowids = driver.getWindowHandles(); 
    iter= windowids.iterator(); 
    String main_windowID=iter.next(); 
    String tabbed_windowID=iter.next(); 
    System.out.println("Main Window ID :"+main_windowID); 
    //switch over to pop-up window 
    Thread.sleep(1000); 
    driver.switchTo().window(tabbed_windowID); 
    System.out.println("Pop-up window Title : "+driver.getTitle()); 
1

您使用的是不是模型对话框,它是一个单独的窗口。

使用此代码:

private static Object firstHandle; 
private static Object lastHandle; 

public static void switchToWindowsPopup() { 
    Set<String> handles = DriverManager.getCurrent().getWindowHandles(); 
    Iterator<String> itr = handles.iterator(); 
    firstHandle = itr.next(); 
    lastHandle = firstHandle; 
    while (itr.hasNext()) { 
     lastHandle = itr.next(); 
    } 
    DriverManager.getCurrent().switchTo().window(lastHandle.toString()); 
} 

public static void switchToMainWindow() { 
    DriverManager.getCurrent().switchTo().window(firstHandle.toString()); 
0

我已经尝试过了,它为你的作品。

String mainWinHander = webDriver.getWindowHandle(); 

// code for clicking button to open new window is ommited 

//Now the window opened. So here reture the handle with size = 2 
Set<String> handles = webDriver.getWindowHandles(); 

for(String handle : handles) 
{ 
    if(!mainWinHander.equals(handle)) 
    { 
     // Here will block for ever. No exception and timeout! 
     WebDriver popup = webDriver.switchTo().window(handle); 
     // do something with popup 
     popup.close(); 
    } 
} 
1

Try the below code. It is working in IE but not in FF22. If模态对话框中找到is printed in Console, then Modal dialog is identified and switched.

public class ModalDialog { 

     public static void main(String[] args) throws InterruptedException { 
      // TODO Auto-generated method stub 
      WebDriver driver = new InternetExplorerDriver(); 
      //WebDriver driver = new FirefoxDriver(); 
      driver.get("http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/showModalDialog2.htm"); 
      String parent = driver.getWindowHandle(); 
      WebDriverWait wait = new WebDriverWait(driver, 10); 
      WebElement push_to_create = wait.until(ExpectedConditions 
        .elementToBeClickable(By 
          .cssSelector("input[value='Push To Create']"))); 
      push_to_create.click(); 
      waitForWindow(driver); 
      switchToModalDialog(driver, parent); 

     } 

     public static void waitForWindow(WebDriver driver) 
       throws InterruptedException { 
      //wait until number of window handles become 2 or until 6 seconds are completed. 
      int timecount = 1; 
      do { 
       driver.getWindowHandles(); 
       Thread.sleep(200); 
       timecount++; 
       if (timecount > 30) { 
        break; 
       } 
      } while (driver.getWindowHandles().size() != 2); 

     } 

     public static void switchToModalDialog(WebDriver driver, String parent) { 
       //Switch to Modal dialog 
      if (driver.getWindowHandles().size() == 2) { 
       for (String window : driver.getWindowHandles()) { 
        if (!window.equals(parent)) { 
         driver.switchTo().window(window); 
         System.out.println("Modal dialog found"); 
         break; 
        } 
       } 
      } 
     } 

    } 
0

假设期望是只是要两个窗口弹出(父之一,一个用于弹出),然后静静等待两个窗口出现,找到另一个窗口句柄并切换到它。

WebElement link = // element that will showModalDialog() 

// Click on the link, but don't wait for the document to finish 
final JavascriptExecutor executor = (JavascriptExecutor) driver; 
executor.executeScript(
    "var el=arguments[0]; setTimeout(function() { el.click(); }, 100);", 
    link); 

// wait for there to be two windows and choose the one that is 
// not the original window 
final String parentWindowHandle = driver.getWindowHandle(); 
new WebDriverWait(driver, 60, 1000) 
    .until(new Function<WebDriver, Boolean>() { 
    @Override 
    public Boolean apply(final WebDriver driver) { 
     final String[] windowHandles = 
      driver.getWindowHandles().toArray(new String[0]); 
     if (windowHandles.length != 2) { 
      return false; 
     } 
     if (windowHandles[0].equals(parentWindowHandle)) { 
      driver.switchTo().window(windowHandles[1]); 
     } else { 
      driver.switchTo().window(windowHandles[0]); 
     } 
     return true; 
    } 
});