Has*_*ziz 5 c# selenium automation webdriver selenium-webdriver
在C#中尝试使用最新版本的webdriver切换窗口时,我陷入了困境。
我有一个基本窗口,当我单击一个按钮时,它将打开一个新窗口。
该按钮的目标代码如下。
window.open(uri, "DisplayPage", " width=1200, scrollbars=yes , resizable = yes , toolbar = no , menubar = no");
Run Code Online (Sandbox Code Playgroud)
我正在使用下面提到的代码来定位新窗口
string BaseWindow = _driver.CurrentWindowHandle;
ReadOnlyCollection<string> handles = _driver.WindowHandles;
foreach (string handle in handles)
{
if (handle != BaseWindow)
{
_driver.SwitchTo().Window(handle).Title.Equals("DisplayPage");
}
}
}
Run Code Online (Sandbox Code Playgroud)
从上面可以看到,我正在使用基本窗口中的目标标题切换到该窗口。这似乎不起作用。
然后,我注意到打开的窗口的标题不同,它是“显示-交易页面”
然后我将代码修改为此
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
仍然没有运气。
有趣的是,我没有得到任何错误提示“找不到窗口”。
问题是,当我尝试单击新打开的页面上的元素时,我收到了NoSuchElementException,这意味着未将新打开的窗口作为目标。
有任何想法吗?
问候,
哈桑
小智 2
一旦窗口更改为您的窗口,您应该中断循环,否则它将始终切换到最后打开的窗口:
foreach (string handle in handles) {
if (handle != BaseWindow) {
if(_driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page"))
break;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用Contains代替equal,它将简化窗口搜索:
_driver.SwitchTo().Window(handle).Title.Contains("Display");
Run Code Online (Sandbox Code Playgroud)