标签: white-framework

使用UIAutomation .NET在桌面上查找所有窗口

我试图使用.NET UIAutomation OR White框架找到所有桌面窗口.我试过了 :

1.)

            AutomationElement rootElement = AutomationElement.RootElement;
            var winCollection = rootElement.FindAll(TreeScope.Subtree, Condition.TrueCondition);
Run Code Online (Sandbox Code Playgroud)

2.)

            Desktop.Instance.Windows();
Run Code Online (Sandbox Code Playgroud)

两者都抛出ArgumentException.如果还有其他方法可以让我知道......

更新/答案:Desktop.Instance.Windows(); 工作正常,但它在使用VS2010调试代码时抛出异常.

white-framework microsoft-ui-automation

7
推荐指数
1
解决办法
8184
查看次数

基于Java的GUI自动化(不限于基于Java的GUI,如Swing)

是否有任何用Java编写的开源工具/框架可用于自动化所有Windows应用程序(不像Abbot或FEST那样自动化基于Java的GUI应用程序).

我听说过WHITE有点像.Net Languages.是否有基于Java的替代方案或Java中的框架可以使用WHITE或UIAutomation Framework(通过JNI或其他东西)?

似乎有许多基于Java的Web自动化和测试工具,如Selenium,Sahi等.但对于GUI Automation,我发现只有jWinAutoAutoItX的包装器.

Java不支持GUI自动化吗?Java Robot API之外还有什么东西吗?

java testing open-source white-framework ui-automation

7
推荐指数
1
解决办法
2198
查看次数

通过白色访问DataGridView单元格

所以我正在用White进行一些C#自动化/ UI测试,并且遇到了麻烦.我在应用程序中有一个DataGridView,我根据应用程序状态设置不同的背景单元格颜色.我想在使用White的测试期间检查这些颜色,但是我很难这样做.

这就是我想要做的工作.我可以获得网格视图,但只能作为表格.然后,我以后遇到问题因为我最终使用普通的TableCell而不是DataGridViewCells.

var Table = MainWindow.Window.Get<Table>("DataGridViewName");
var Row = Table.Rows[0];
var Cell = Row.Cells[0];
//invalid
//var Color = Cell.Style.BackColor;
Run Code Online (Sandbox Code Playgroud)

有没有人遇到这个或有任何建议?

c# forms automation datagridview white-framework

7
推荐指数
1
解决办法
2257
查看次数

System.Windows.Automation在枚举表行与UIAutomationCore时非常慢

我试图通过UI Automation自动测试我的应用程序(主要TestStack.White用于提供友好的界面;它System.Windows.Automation用作后端).我有一个约200行的表,我需要测试它的值(实际上我只想测试第一行和最后几行).我发现使用COM-interop UIAutomationCore本身,我可以在几分之一秒内枚举行,但只有当我不使用White或System.Windows.Automation.一旦System.Windows.Automation初始化,未来的UI自动化行动枚举行是缓慢的:

First COM run: it took 0.04 seconds to get 102 rows!
First System.Windows.Automation run: it took 7.18 seconds to get 102 rows!
Second COM run: it took 7.87 seconds to get 102 rows!
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的WinForms测试应用程序(TableTest.exe以验证它是否System.Windows.Automation与我的应用程序无关:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    var form = new Form() { Text = "TableTest", WindowState = FormWindowState.Maximized };
    var dgv = new DataGridView() { Name = "DGV", Dock = DockStyle.Fill, …
Run Code Online (Sandbox Code Playgroud)

c# white-framework ui-automation winforms microsoft-ui-automation

7
推荐指数
1
解决办法
1793
查看次数

UI自动化事件被引发两次

我无法从流程内部收听自动化事件.我在下面写了一个示例,其中有一个带有单个按钮的简单WPF应用程序.使用TreeScope:Descendants在窗口上为Invoke事件添加自动化处理程序.

public MainWindow()
{
    InitializeComponent();

    Loaded += OnLoaded;
}

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    IntPtr windowHandle = new WindowInteropHelper(this).Handle;
    Task.Run(() =>
    {
        var element = AutomationElement.FromHandle(windowHandle);

        Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent, element, TreeScope.Descendants,
            (s, a) =>
            {
                Debug.WriteLine($"Invoked:{a.EventId.Id}");
            });

    });
}

private void button_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Clicked!");
}
Run Code Online (Sandbox Code Playgroud)

当我点击按钮时,这就是我得到的:

Invoked:20009
Clicked!
Invoked:20009
Run Code Online (Sandbox Code Playgroud)

为什么Invoked事件被处理两次?

如果我删除Task.Run我只能得到它一次,但我已经阅读了几个你不应该从UI线程调用自动化代码的地方(例如https://msdn.microsoft.com/en-us/ library/ms788709(v = vs.110).aspx).在真实代码中这样做也是不切实际的.

我在此示例中使用了UIAComWrapper库,但是我对UIAutomationClient库的托管版和COM版都有相同的行为.

c# white-framework microsoft-ui-automation

7
推荐指数
1
解决办法
681
查看次数

UI自动化真的是WPF应用程序测试的不错选择吗?

在谈论自动化UI测试时,对话总是最终得到UI自动化.这是唯一的选择吗?

我个人不喜欢它的一个主要原因 - 复杂性.它适用于所有类型的应用程序.这种普遍性永远不会免费.UIA引入了另一层抽象和一个相当复杂的API.标准模式是有限的.自定义控件支持需要大量编码.我想知道为什么有人认为这是一个不错的选择?

WPF具有辉煌和非常丰富的抽象,其中UI是视觉元素的分层树.这些元素暴露了许多方法,事件和属性.树支持各种引用方式(例如相对源语法).我们在UIA中放弃了所有这些.为了什么?为了兼容旧式应用和网络?实际上,谁会需要呢?所有行业的杰克都是无所不能的大师.

像Snoop这样的工具可以将自己注入到正在运行的应用程序中并完全控制它.他们可以更改控件属性的值并引发事件.那不够吗?不.您希望您的测试能够像用户一样使用鼠标和键盘与UI进行交互.但这是另一个可以解决的问题.

所以我想知道,有什么我不了解UIA的快乐吗?

testing wpf white-framework ui-automation uia

6
推荐指数
0
解决办法
805
查看次数

如何关闭Test Stack White的日志记录?

White正在向控制台输出大量日志,我想将其关闭以查看输出.这怎么可能?我尝试了以下但仍然看到日志.是否需要添加更多代码?

void func()
{
    CoreAppXmlConfiguration.Instance.LoggerFactory = new WhiteDefaultLoggerFactory(LoggerLevel.Off);

    // Open application and perform actions...
}
Run Code Online (Sandbox Code Playgroud)

white-framework

6
推荐指数
1
解决办法
1385
查看次数

TestStack White - 从命令行运行测试

我正在寻找一个从命令行开始测试的解决方案.

  • 我在VisualStudio2017中为我的.NET解决方案创建了一个UnitTest Procjet.
  • 将TestStack.White NuGet包添加到项目中.
  • 当我从VisualStudio2017开始时,测试正在流畅地运行.
  • 我也想从詹金斯开始.我认为从命令行最简单,所以我将它添加到我的管道配置(Jenkinsfile)

    stage('Run UI Tests') {
        steps {
            bat('"C:\\PATH_TO_MSTEST\\mstest" /testcontainer:PATH_TO_MY_TEST_PROJECT\\bin\\Debug\\MyTests.dll')
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

当我尝试从cmd启动它时,就像我使用常规单元测试一样,它不起作用.
它说:

Starting execution...  
No tests to execute.
Run Code Online (Sandbox Code Playgroud)

我在开始"运行UI测试"阶段之前构建项目.

任何想法如何使其工作?可以在stackoverflow,TestStack的github问题以及网络上的其他荣耀位置找到它

unit-testing white-framework ui-testing jenkins teststack

6
推荐指数
1
解决办法
293
查看次数

白色UIAutomation click()停止在不同平台上工作

我正在使用White来自动化我们的C#WPF UI的BDD测试.

我的第一个测试在我的开发机器上运行良好(运行Windows 7).但是,当我尝试在构建服务器(运行Windows Server 2003 R2的虚拟机)上运行相同的代码时,它无法正常工作.在这两种情况下,测试都是从命令行运行的,测试使用的是Cuke4Nuke框架.在服务器的情况下,我通过远程桌面连接访问服务器.

代码如下:

var application = Application.Launch("whiteApp.exe");
var initializeOption = InitializeOption.NoCache;
var windowCriteria = SearchCriteria.ByText("whiteApp");
var window = application.GetWindow(criteria, initializeOption);
var criteria = SearchCriteria.ByAutomationId("rightButton");
var button = (Button) window.Get(criteria);
button.click();
Run Code Online (Sandbox Code Playgroud)

问题是在服务器上运行按钮单击事件时不会触发它.如果在白方执行完毕后UI处于打开状态,则可以单击该按钮(使用鼠标).一个有趣的观点是,在运行click方法后,按钮确实显示了被点击的证据,如下图所示,在其他按钮的情况下,显示了鼠标悬停效果.

点击前后的按钮

c# wpf bdd white-framework ui-automation

5
推荐指数
1
解决办法
2799
查看次数

UI自动化白色框架"检测到NonComVisibleBaseClass"异常

我正在测试一个加载powerpoint(.ppt或.pptx)文件的应用程序插入它.当文件加载到应用程序内部时,应用程序给出了类似powerpoint的感觉和一些额外的设置.当我尝试自动化应用程序时,我单击一个按钮将powerpoint文件加载到应用程序中.加载过程后,白色框架无法继续播放.

当我再次重新启动相同的测试时,我得到了" 检测到NonComVisibleBaseClass "异常.

我只能在重新启动整个应用程序后继续我的测试.有人遇到过这种问题吗?您的答案对我的测试非常有帮助.

automated-tests white-framework ui-testing ui-automation

5
推荐指数
1
解决办法
4152
查看次数