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

标签 c# selenium automation webdriver selenium-webdriver

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

有什么想法吗?

问候,

哈桑

最佳答案

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

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# - Webdriver、CSharp、C# - 无法在窗口之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298841/

相关文章:

javascript - Protractor - 通用等待 URL 更改

c# - 如何使用Newtonsoft Deserialize C#反序列化JSON

c# - 目录不存在 - 参数名称 : directoryVirtualPath

c# - 如何使用 C# 正确解析 RAW(Raw Ip) 数据包?

node.js - Webdriver.io - 如何在配置中使用 beforeEach Hook

jenkins - 在一屏中显示 Jenkins 中特定作业的选定模块的状态

c# - 需要 RegEx 或其他方式来分隔包含转义引号的引用标记

python - 捆绑一个独立的exe

XPath 到 CSS 选择器

ios - 如何在 ios 模拟器 8.x/7.x 上运行 Appium