WebDriver - 切换到新窗口并选择下拉列表在IE中不起作用

时间:2016-05-13 18:30:38

标签: selenium webdriver dropdown

尝试切换到新窗口选项卡,然后从下拉列表中选择项目无效..

public static void handleNewTabWindow() {
    driver.findElement(By.xpath(".//img[@src='/images/buttons/gl_upload.gif']")).click();
    String Parent_Window = driver.getWindowHandle();
    for (String Child_Window : driver.getWindowHandles()) {
        driver.switchTo().window(Child_Window);
        WebElement dropdown = getWhenVisible(By.xpath(".//select[@name='UPLOAD_ORG_ID']"));
        dropdown.click();
        getWhenVisible(By.xpath(".//option[contains(text(), 'CI Borrower')]")).click();
    }
    driver.switchTo().window(Parent_Window);
    driver.close();
}

1 个答案:

答案 0 :(得分:0)

您必须等到屏幕上出现新窗口才能切换到它。您的代码在点击按钮后立即尝试切换,在几毫秒内 - 浏览器不是那么快,您必须等待几秒钟左右。

一个不太优雅,但快速的解决方案是在这里引入一个固定的Thread.sleep( 2000 );

driver.findElement(By.xpath(".//img[@src='/images/buttons/gl_upload.gif']")).click();
Thread.sleep( 2000 );
String Parent_Window = driver.getWindowHandle();

但这并不能很好地发挥作用。

更好的解决方案是实现一种方法,该方法将等到屏幕上出现新窗口(但不超过某个固定超时 - 例如30-60秒)。例如,我们项目中最常用的方法之一是等待具有给定标题的窗口的方法,如下所示(代码框架):

void waitForWindowWithTitleAndSwitchToIt( String windowTitle, int timeoutInSeconds ){
   .... 
   while( timeout-not-expired ){
      handles = driver.getWindowHandles():
      for( String handle: handles ){
         driver.switchTo.window( handle );
         if( driver.getTitle().contains( windowTitle ) ){
             // found a window with a given title
             return;
         }
      }
      sleep( for a 1-2 seconds ); 
      // and try again 
   }
   throw new TimeoutException(
          String.format("A browser window named %s doesn't appear on the screen", windowTitle )
          );
   }

我们在项目中实现了几个这样的方法,它们使用不同的标准等待一个新窗口:等待具有给定精确标题的窗口,对于包含给定子字符串的标题的窗口,对于一个窗口,页面源中的给定字符串,用于在URL中具有给定(子)字符串的窗口等。