Webdriver, CSharp, C# - 无法在窗口之间切换

本文关键字:窗口 之间 CSharp Webdriver | 更新日期: 2023-09-27 18:32:02

尝试使用最新版本的 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,这意味着新打开的窗口尚未被定位。

有什么想法吗?

问候

哈桑

Webdriver, CSharp, C# - 无法在窗口之间切换

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

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

虽然你自己破解了答案,但在 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());