用于编码UI的SwitchTo方法

时间:2014-05-17 23:00:55

标签: visual-studio automation selenium-webdriver coded-ui-tests alm

我正在为应用程序进行手动编码的编码UI测试。

该应用程序具有在2个窗口中运行的特定功能。单击一个按钮时,会出现一个新窗口,然后用户选择该窗口关闭,然后用户继续在主窗口上执行操作。

使用Selenium,我会通过遍历所有窗口句柄并通过使用“ driver.SwitchTo()。窗口(句柄)将页面的URL传递给我来处理它。 “ 方法。但是,使用Coded UI,我还没有找到类似的解决方案。使用Process类我可以做类似的工作:

Process[] myList = Process.GetProcessesByName("iexplore");
foreach (Process item in myList)
if (item.MainWindowTitle.Contains("Window Title"))
{
item.Kill();
}

问题是我正在测试的应用程序设计很差,整个应用程序中的所有窗口都具有相同的名称,因此它不起作用。

是否有一种方法可用于切换到Coded UI上的其他窗口?或者最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

看看这个问题,它可能会有所帮助:Interacting with multiple instances of an application in Coded UI

你没有在CUIT中进行“切换”,每个窗口和控件都是通过UITestControl对象访问的。如果你想在其他窗口上做东西,你可以为它创建一个新对象。如果您无法使用搜索属性区分这两个窗口,则可以使用Instance属性或FindMatchingControls方法。

要捕捉窗口创建事件,您可以使用winhook。它为您提供了创建的每个窗口的窗口句柄。使用它可以查看创建的窗口是否是您正在等待的窗口,然后使用UITestControlFactory.FromWindowHandle创建一个UITestControl以供CUIT进行交互。如果你有一个为该窗口生成的类,你可以创建该类的实例并调用它的CopyFrom方法将你从窗口句柄创建的控件传递给它。

答案 1 :(得分:1)

我正在使用:

public static HtmlDocument WaitForPopup(string popupName, string text)
{
    BrowserWindow browser = new BrowserWindow();
    browser.SearchProperties.Add(BrowserWindow.PropertyNames.Name, popupName,
    PropertyExpressionOperator.Contains);

    browser.WindowTitles.Add(popupName);
    browser.WaitForControlExist();
    browser.WaitForControlReady();
    browser.SetFocus();

    HtmlDocument html = new HtmlDocument(browser);
    html.SearchProperties.Add(HtmlDocument.PropertyNames.InnerText, text,
    PropertyExpressionOperator.Contains);
    html.WaitForControlExist();
    html.WaitForControlReady();
    Playback.Wait(1000);

    return html;
}

只需调用WaitForPopup("您的窗口名称","窗口中的一些常量文本")并继续测试。 请注意,此方法将返回新窗口的html,您可以进一步使用它。