2012-04-24 21 views
4

C#でWebdriverの最新バージョンを使用してウィンドウを切り替えようとしているときに動かなくなりました。Webdriver、CSharp、C# - ウィンドウを切り替えることができません。

私は基本的なウィンドウを持っています。ボタンをクリックすると、新しいウィンドウが開きます。

このボタンのターゲットコードは次のとおりです。私はあなたが上から見ることができるように、新しいウィンドウに

string BaseWindow = _driver.CurrentWindowHandle; 

    ReadOnlyCollection<string> handles = _driver.WindowHandles; 

    foreach (string handle in handles) 
    { 

     if (handle != BaseWindow) 
     { 
      _driver.SwitchTo().Window(handle).Title.Equals("DisplayPage"); 

     } 
    } 
} 

を対象に下記のコードを使用しています

window.open(uri, "DisplayPage", " width=1200, scrollbars=yes , resizable = yes , toolbar = no , menubar = no"); 

は、私はベースウィンドウからターゲットタイトルを使用してウィンドウに切り替えています。これはうまくいかないようです。私は、まだこの

string BaseWindow = _driver.CurrentWindowHandle; 

     ReadOnlyCollection<string> handles = _driver.WindowHandles; 

     foreach (string handle in handles) 
     { 

      if (handle != BaseWindow) 
      { 
       _driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page"); 

      } 
     } 
    } 

運にコードを修正 - 「トランザクションのページ表示」

が、私はその後、開いたウィンドウのタイトルが異なっていたことに気づいた、それはでした。

興味深いことに、「ウィンドウが見つかりません」というエラーは表示されません。

問題は、新しく開いたページの要素をクリックしようとすると、NoSuchElementExceptionが発生します。これは、新しく開いたウィンドウがターゲットにされていないことを意味します。

アイデア?

よろしく、

ハサン

+0

Doh!誰が考えていたでしょうか?新しく開かれたウィンドウは、IEの「信頼済みサイト」の一部ではありませんでした。 私のコードが正しいです、私の信頼できるサイトにターゲットURLを追加した後、今は正常に動作しています。 –

答えて

2

ウィンドウがあなたの窓に変更したら、あなたは、ループを切断する必要があり、それ以外の場合は、常に開いたウィンドウを最後に切り替わります:

foreach (string handle in handles) { 
if (handle != BaseWindow) { 
    if(_driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page")) 
    break; 
    } 
} 

あなたが代わりにContainsで試すことができますequalの場合、ウィンドウ検索を簡略化します。

_driver.SwitchTo().Window(handle).Title.Contains("Display"); 
0

あなた自身で解答が分かりましたが、C#のウィンドウを切り替える別の方法があります。

// initiate webdriver 
IWebDriver driver = new FirefoxDriver(); 

//perform some action to open a new window. Like clicking a link. 
driver.FindElement(By.Id("btnId")).Click(); 

//switch to new window. 
driver.SwitchTo().Window(driver.WindowHandles.Last()); 

//if you want to switch back to your first window 
driver.SwitchTo().Window(driver.WindowHandles.First()); 
関連する問題