标签: white-framework

Backgroundworker中的测试执行突然终止于具有许多childelements的元素

我的一般设置:我们编写了一个带有小gui的excel导入器,允许非程序员使用"Button.Click"等命令编写和执行gui-tests.底层框架是TestStack.White.在导入excel文件和一些其他用户交互之后,测试在System.ComponentModel.BackgroundWorker内启动,只要我不查看(或甚至与包含大量childelements的元素交互),它就可以正常工作.

但是,只要我与TestStack.White.UIItems.WindowItems.Window或具有大量元素的TestStack.White.UIItems.UIItemContainer进行交互,testexecution就会结束.

通过交互,我的意思是从简单的东西,如非空检查或分配到局部变量或类似要求它的子计数.结束测试的一些例子:1)

if(theElement != null){ //everything after this line does not happen. The operator doesn't seem to be overloaded
   doStuff(); //it never reaches this point
}
Run Code Online (Sandbox Code Playgroud)

2)

UIItemContainer pointOfInterest = theElement; //everything after this line does not happen
Run Code Online (Sandbox Code Playgroud)

3)

System.Diagnostics.Debug.WriteLine("AmountOfElements: " + UIAnchor.Items.Count); //the output doesn't come. everything after this line does not happen
Run Code Online (Sandbox Code Playgroud)

在没有数百个元素的窗口中,所有三个示例都按预期工作.

我的意思是很多元素,例如一个内部有ScrollView的Window,它有一个包含数十个甚至数百个条目的表,其中每个条目包含3-4列文本或复选框或类似的东西.

BackgroundWorkers RunWorkerCompleted以及Disposed也不会被调用.我没有得到任何异常,即使有目的地放置了try/catch块我也没有得到任何东西.调试器到达导致问题的那一行,就是这样.之后没有任何事情发生,即使等待1小时.

相反,我得到了几个不同的"线程{某些十六进制ID}已退出代码259(0x103)." 在Visual Studio的输出窗口中.这是我上次的测试执行:

The thread 0x830 has exited with code 259 (0x103).
The thread 0xfc0 has exited with code 259 (0x103). …
Run Code Online (Sandbox Code Playgroud)

c# white-framework backgroundworker ui-automation

18
推荐指数
1
解决办法
379
查看次数

构建的测试不会添加到Visual Studio Test Explorer窗口中

  1. 我为Visual Studio 2013设置了SpecFlow插件.
  2. 我创建了新的Feature Item并构建它.

结果:测试资源管理器中未显示构建的测试.为什么?

我是按照这个视频做的

white-framework specflow

18
推荐指数
4
解决办法
2万
查看次数

Application.GetWindow()*非常*慢

我按顺序调用了以下两种方法(顺序使用适当的类级别字段)

public const string ProcessName = "This is"
public const string WindowTitle = "somewhat proprietary."

public Application App { get; set; }

public void Launch()
{
    var theProcess = Process.GetProcesses().First(p => p.ProcessName.Contains(ProcessName))
     App = Application.Attach(theProcess);
}

public void Select()
{ 
    var window = App.GetWindow(WindowTitle);

    var textBox = window.Get<TextBox>();
    //etc, do more stuff in the window
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,调用App.GetWindow()需要很长时间.喜欢超过一分钟.应用程序和窗口都是打开和运行的.

我已经尝试过重载,GetWindow()并尝试调用Application.GetWindows()Application.Find(),但结果相同.

有没有人想过如何减少这个时间,或者至少确定需要这么长时间?我没有嫁给我的实施任何延伸 - 无论是什么让我的窗口对象对我来说都没问题.

更新:

为了解决迄今为止的评论,我修改了代码以尽量消除其他许多问题.

public void Select()
{
    var processes = Process.GetProcesses().ToList();
    var …
Run Code Online (Sandbox Code Playgroud)

c# white-framework

18
推荐指数
1
解决办法
1116
查看次数

Windows上的Jenkins和没有RDC的GUI测试

我们有Jenkins的主从配置.我们的.NET项目是由在Windows上运行的从属Jenkins实例构建的.

有一堆GUI测试,但是如果打开了远程桌面连接(RDC)会话,它们似乎只会运行.

当尝试在没有RDC的情况下运行测试时,Jenkins没有在测试中显示任何进展.然而,然后,我连接到Slave的桌面,可以看到启动的应用程序的主窗口,但UI测试框架(白色)无法执行任何操作.

Jenkins slave通过Java Web Start启动.

我在几个网站上看到,遗憾的是,没有RDC会话就无法运行GUI测试.

我只想确认这是真的,并想知道是否有任何解决方法.

.net continuous-integration hudson white-framework jenkins

17
推荐指数
3
解决办法
2万
查看次数

是否有人使用Microsoft UI Automation成功实施UI测试自动化制度?

我正在寻找一个自动UI测试框架/软件工具.在过去,我一直在使用TestComplete,虽然它是一个很好的软件,但GUI测试自动化的概念被认为是足够困难,我写了一些帖子抱怨 .

第三方测试自动化工具的一个问题是,您必须学习新语言才能提高工作效率,更不用说工具支持很差.我现在正计划研究.Net 3.0和White Framework附带的Microsoft UI Automation.但在我这样做之前,我想知道那里的结果是什么.

有没有经验可以分享?您是否在应用程序中使用UI自动化创建了可持续且成功的测试套件?

编辑:这似乎是一个非常难的问题.如果我在这几天内没有收到任何答案,我会为此设置赏金.

.net white-framework ui-automation

11
推荐指数
1
解决办法
4583
查看次数

计算新的ScrollPercent - 在ViewSize更改后

首先,基本上我相信我只是需要帮助来弄清楚如何计算它,数学并不是我的强项.

仅供参考,MS-Word很可能与解决我的问题无关,我基本上只是提及它,因此你知道我所处的背景,但我相信它对于那些不了解MS-Word的人也应该是可以解决的.

我有一个Word有属性的问题,VerticalPercentScrolled这是一个integer.

这并不像我需要的那样准确,考虑一个300页的Word文档,滚动条只能有integer0到100(百分比),所以例如,300页文档的25%是一个相当大的范围.

我已经离开并在UI Automation库的帮助下读取了正确的值- TestStack.White - 如果发生了一些不需要的滚动,可以成功地将其设置为旧值.

像这样:

var hWnd = (IntPtr)WordUtils.GetHwnd();
var processId = Process.GetCurrentProcess().Id;

var uiApp = TestStack.White.Application.Attach((int)processId);
var uiWindow = uiApp.GetWindow(WindowHandling.GetWindowText(hWnd), InitializeOption.NoCache);

var wf = (IUIItemContainer)uiWindow.Get(SearchCriteria.ByClassName("_WwF"));
var wbs= wf.GetMultiple(SearchCriteria.ByClassName("_WwB"));
if (wbs.Length != 1)
    return;

var wb= (IUIItemContainer)wbs.First();
var wgs = wb.GetMultiple(SearchCriteria.ByClassName("_WwG"));
if (wgs.Length != 1)
    return;

var wg = wgs.First();
var element = wg.AutomationElement;

var oldVerticalPercent = (double)element.GetCurrentPropertyValue(ScrollPattern.VerticalScrollPercentProperty);
Run Code Online (Sandbox Code Playgroud)

使用此代码,我得到一个百分比值,让我们说9.442248572683356而不是9.

要重置值,请使用以下代码:

object scrollPattern;
if …
Run Code Online (Sandbox Code Playgroud)

c# white-framework ms-word ui-automation

10
推荐指数
1
解决办法
220
查看次数

使用White进行集成测试

有没有人有白色框架的经验?

www.codeplex.com/white

我正在考虑将它用于我们的Windows客户端的基本烟雾测试的下一个项目.我想对文章或你自己的经历提出一些建议.谢谢.

testing integration-testing white-framework winforms

9
推荐指数
2
解决办法
2260
查看次数

白色 - 文件打开对话框

这是我的问题.我有一个应用程序,它打开一个文件打开对话框,我试图在文件路径和文件名中输入"文件名:"组合框部分.

应用程序使用您登录的表单加载.这将打开另一个表单,其中有许多按钮.选择其中一个按钮可打开另一个表单.在这种形式中,有一个按钮来选择文件.在这个阶段,有3种形式开放.这将打开标准文件打开对话框.我似乎无法处理此文件打开对话框.

这是我正在使用的代码.

Window LoginForm = application.GetWindow("LoginForm");
LoginForm.Get<Button>("btnSelectFiles").Click(); // This is from the 3rd form that is opened 
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我可以使用LoginForm变量访问其他表单中的所有按钮.我尝试了以下内容.

Window FileOpenDialog = application.GetWindow("Open", InitializeOption.NoCache);
Run Code Online (Sandbox Code Playgroud)

这不起作用.

我也试过以下但是这会返回null.我以为我可以使用LoginForm变量访问它.

Win32ComboBox comboBox = LoginForm.Get<Win32ComboBox>("Filename"); 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

c# white-framework winforms

8
推荐指数
1
解决办法
5315
查看次数

如何使用TestStack.White Framework从键盘发送ENTER

我正在编写ac#代码来测试我的应用程序中的UI.我想从键盘发送ENTER.我已经检查过了TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.它不包含任何方法发送ENTER.

谢谢.

white-framework ui-automation

8
推荐指数
1
解决办法
4238
查看次数

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
查看次数