Opera - driver.WindowHandles returns 计数错误
Opera - driver.WindowHandles returns wrong count
在我的场景中,我正在验证单击 link 是否导航到另一个页面(验证页面标题)。 IE、FF 和 chrome return 2 符合预期,但 Opera returns 4. 在 运行 测试时我没有打开任何其他 Opera 实例。它单击 link 并打开所需页面,但 WindowHandles returns 4.
代码:
string BaseWindow = Drivers._driverInstance.CurrentWindowHandle;
Drivers._driverInstance.SwitchTo().Frame(Drivers._driverInstance.FindElement(By.ClassName("iframe-fix")));
if (Drivers._driverInstance.GetType().Name.ToString() == "InternetExplorerDriver")
{
IJavaScriptExecutor js = (IJavaScriptExecutor)Drivers._driverInstance;
js.ExecuteScript("arguments[0].click();", Drivers._driverInstance.FindElement(By.LinkText("Professional Services.")));
}
else
{
Drivers._driverInstance.FindElement(By.LinkText("Professional Services.")).Click();
}
System.Collections.ObjectModel.ReadOnlyCollection<string> handles = Drivers._driverInstance.WindowHandles;
if (handles.Count == 2)
{
foreach (string handle in handles)
{
if (handle != BaseWindow)
{
string title = Drivers._driverInstance.SwitchTo().Window(handle).Title;
Assert.AreEqual("title of the page", Drivers._driverInstance.Title);
}
}
}
else
{
Assert.Fail("WindowHandles returns " + handles.Count + " instead of 2");
}
Drivers._driverInstance.SwitchTo().Window(BaseWindow);
有人可以建议为什么 Opera returns 4 而不是 2。
谢谢。
Opera 驱动程序 return 句柄数不正确。此问题已报告给项目,但该项目似乎不再维护:
https://github.com/operasoftware/operachromiumdriver/issues/15
我在 Opera 驱动程序中遇到了与您相同的情况,另外(如果我没记错的话)CurrentWindowHandle
属性 也不起作用。
解决方法:
public static void SwitchToPopup(TestTarget target, bool toPopup)
{
if (target.IsOpera)
{
if (toPopup)
{
_windowIndex += 3;
new WebDriverWait(target.Driver, TimeSpan.FromSeconds(DefaultTimeoutInSeconds)).Until(d => d.WindowHandles.Count > _windowIndex);
}
else
{
_windowIndex -= 3;
}
target.Driver.SwitchTo().Window(target.Driver.WindowHandles[_windowIndex]);
}
else
{
IEnumerable<string> windowHandles = toPopup ? target.Driver.WindowHandles : target.Driver.WindowHandles.Reverse();
bool bFound = false;
foreach (string windowHandle in windowHandles)
{
if (bFound)
{
target.Driver.SwitchTo().Window(windowHandle);
break;
}
bFound = windowHandle == target.Driver.CurrentWindowHandle;
}
}
}
在我的场景中,我正在验证单击 link 是否导航到另一个页面(验证页面标题)。 IE、FF 和 chrome return 2 符合预期,但 Opera returns 4. 在 运行 测试时我没有打开任何其他 Opera 实例。它单击 link 并打开所需页面,但 WindowHandles returns 4.
代码:
string BaseWindow = Drivers._driverInstance.CurrentWindowHandle;
Drivers._driverInstance.SwitchTo().Frame(Drivers._driverInstance.FindElement(By.ClassName("iframe-fix")));
if (Drivers._driverInstance.GetType().Name.ToString() == "InternetExplorerDriver")
{
IJavaScriptExecutor js = (IJavaScriptExecutor)Drivers._driverInstance;
js.ExecuteScript("arguments[0].click();", Drivers._driverInstance.FindElement(By.LinkText("Professional Services.")));
}
else
{
Drivers._driverInstance.FindElement(By.LinkText("Professional Services.")).Click();
}
System.Collections.ObjectModel.ReadOnlyCollection<string> handles = Drivers._driverInstance.WindowHandles;
if (handles.Count == 2)
{
foreach (string handle in handles)
{
if (handle != BaseWindow)
{
string title = Drivers._driverInstance.SwitchTo().Window(handle).Title;
Assert.AreEqual("title of the page", Drivers._driverInstance.Title);
}
}
}
else
{
Assert.Fail("WindowHandles returns " + handles.Count + " instead of 2");
}
Drivers._driverInstance.SwitchTo().Window(BaseWindow);
有人可以建议为什么 Opera returns 4 而不是 2。
谢谢。
Opera 驱动程序 return 句柄数不正确。此问题已报告给项目,但该项目似乎不再维护:
https://github.com/operasoftware/operachromiumdriver/issues/15
我在 Opera 驱动程序中遇到了与您相同的情况,另外(如果我没记错的话)CurrentWindowHandle
属性 也不起作用。
解决方法:
public static void SwitchToPopup(TestTarget target, bool toPopup)
{
if (target.IsOpera)
{
if (toPopup)
{
_windowIndex += 3;
new WebDriverWait(target.Driver, TimeSpan.FromSeconds(DefaultTimeoutInSeconds)).Until(d => d.WindowHandles.Count > _windowIndex);
}
else
{
_windowIndex -= 3;
}
target.Driver.SwitchTo().Window(target.Driver.WindowHandles[_windowIndex]);
}
else
{
IEnumerable<string> windowHandles = toPopup ? target.Driver.WindowHandles : target.Driver.WindowHandles.Reverse();
bool bFound = false;
foreach (string windowHandle in windowHandles)
{
if (bFound)
{
target.Driver.SwitchTo().Window(windowHandle);
break;
}
bFound = windowHandle == target.Driver.CurrentWindowHandle;
}
}
}