2016-05-13 1 views
0

に動作しない機能していません。..webdriverを - 新しいウィンドウに切り替え、ドロップダウンを選択し、新しいウィンドウのタブに切り替えしようとしてから、ドロップダウンリストから項目を選択するIE

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(); 
} 

答えて

0

あなたは新しいまで待たなければなりません画面に切り替える前に画面にウィンドウが表示されます。あなたのコードは数ミリ秒でボタンをクリックした直後に切り替えようとしています。ブラウザはあまり速くないので、数秒待たなければなりません。

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

が、これは非常にうまく機能しません:

A非常にエレガントではないが、迅速な解決策は、ここでは、固定Thread.sleep(2000);導入することです。


よりよい解決策は、( - 例えば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内の(サブ)文字列など

関連する問題