2012-04-24 94 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()); 
相关问题