【问题标题】:Webdriver, CSharp, C# - Cannot switch between windowsWebdriver、CSharp、C# - 无法在窗口之间切换
【发布时间】:2012-05-05 03:28:17
【问题描述】:

我在尝试使用 C# 中最新版本的 webdriver 切换窗口时卡住了。

我有一个基本窗口,当我单击一个按钮时,它会打开一个新窗口。

这个按钮的目标代码如下。

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,这意味着新打开的窗口没有被定位。

有什么想法吗?

问候,

哈桑

【问题讨论】:

  • 噢!谁会想到。新打开的窗口不是 IE 中“受信任的站点”的一部分。我的代码是正确的,在将目标 URL 添加到我的受信任站点后,它现在可以正常工作了。

标签: c# selenium automation webdriver selenium-webdriver


【解决方案1】:

一旦窗口更改为您的窗口,您应该中断循环,否则它将始终切换到最后打开的窗口:

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

【讨论】:

    【解决方案2】:

    虽然你自己破解了答案,但还有另一种方法可以在 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());
    

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多