2012-04-24 93 views
4

當我嘗試在C#中使用最新版本的webdriver切換窗口時,我被卡住了。Webdriver,CSharp,C# - 無法在窗口之間切換

我有一個基本窗口,當我點擊一個按鈕時,它會打開一個新窗口。

此按鈕的目標代碼如下。

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("DisplayPage"); 

     } 
    } 
} 

正如你可以看到從上面,我切換到使用目標的標題從基地窗口的窗口。這似乎並不奏效。

然後我注意到,在打開的窗口的標題是不同的,它是「顯示 - 交易網頁」

然後我修改了代碼,這

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添加到我的可信站點後,它現在工作正常。 – 2012-04-24 14:16:26

回答

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()); 
相關問題