标签: ui-automation

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

尝试使用UI自动化在UITableViewCell中点击UIButton失败,"无法点击"

我有一个iPhone应用程序,我正在使用UI自动化进行测试.

我有一个按钮,UITableViewCell但是当我尝试使用UI Automation点击它时,我收到以下错误.

Script threw an uncaught JavaScript error: target.frontMostApp().mainWindow().scrollViews()[0].elements()[element_name].tableViews()[0].elements().firstWithPredicate(name contains[c] 'Brooklyn').elements()["detailsButton"] could not be tapped
Run Code Online (Sandbox Code Playgroud)

我已在Interface Builder中的按钮上启用了辅助功能,并为其分配了辅助功能标签(和标识符)"detailsButton".我可以检索按钮元素并验证它是否有效.我出于某种原因无法点击它.

UIATableCell布鲁克林

UIButton是一个圆形矩形按钮,启用了用户交互.感谢您的任何反馈.

iphone xcode instruments ui-automation ios

17
推荐指数
1
解决办法
3316
查看次数

如何使用EnumWindows查找具有特定标题/标题的窗口?

我正在开发一个应用程序,最终将成为推动WPF应用程序UI测试的API.

在我们正在进行的初始测试的一个点上,我们得到2个Windows安全弹出窗口.我们有一些循环10次的代码,它使用FindWindowByCaption方法获取其中一个弹出窗口的句柄并输入信息并单击确定.

10次​​中有9次可以正常运行,但我们偶尔会看到看起来像是一场比赛的情况.我的怀疑是,当只有一个窗口打开时,循环开始,而当它输入信息时,第二个窗口打开并窃取焦点; 在此之后它只是无限期地挂起.

我想知道的是,如果有任何方法来获取给定标题的所有窗口句柄,那么我们可以等到2开始循环之前.

c# ui-automation

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

RPA是否有任何开源工具(机器人过程自动化)

我们想要构建一个RPA软件.

RPA的定义:软件"机器人"是一种软件应用程序,它复制人类与计算机系统的用户界面交互的动作.

几天我搜索了RPA开源软件.

是否有RPA的开源工具?我知道一些商业软件,如"BluePrism","OpenSpan"等.

感谢您的意见.

automation ui-automation

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

UI自动化和WPF的经验

我们正在开发一个相当大的基于WPF的应用程序,并希望在我们的测试套件中包含一些自动UI测试(它已包含许多单元测试).

微软的UI自动化框架听起来非常适合在测试设置中以编程方式启动和与应用程序交互.但是,我一直在努力寻找样本和技术经验的可靠参考,MSDN上提供的文章和小样本不足以让我相信它是一个可靠的选择.

那么,是否有人在他们的测试套件中使用UI Automation Framework有真实的经验?有什么警告和陷阱?编写测试脚本时的任何最佳实践,是否可以"记录和重放"为可编写脚本的格式,您应该从应用程序中进行多少测试,如何将其合并到自动构建中?我们是否应该寻找与UI自动化框架不同的另一个方向?

随意在这里发布您的经验或链接到我可能错过的一些好的参考

wpf ui-automation

16
推荐指数
2
解决办法
8292
查看次数

如何进行Metro风格应用的UI自动化?

我已经下载并安装了Windows 8消费者预览版,我想弄清楚如何使用UI Automation API来从metro风格的应用程序中获取数据.

背景:我有很多自动化测试,它们使用Microsoft UI Automation API与应用程序进行交互.这些脚本是用IronRuby编写的,针对.NET 4

最初,我只想检查开始菜单是否可见(如果是,请关闭它)

根据微软的说法,普通的UI Automation API应该能够访问和控制metro风格的应用程序,但问题是,我无法弄清楚我的代码如何实际访问metro应用程序的UI?我们查看UI自动化数据的正常方式是使用UISpy,但是当我在Windows 8下运行UI间谍并启动一个metro应用程序时,没有提到它......似乎地铁应用程序(包括启动屏幕)被围住了离开桌面.

如果我在UISpy中找不到Metro应用程序,我怎样才能找到他们的自动化ID,以及如何从我的自动化测试脚本中找到它们?

ui-automation windows-8 windows-runtime

16
推荐指数
2
解决办法
9011
查看次数

如何在android espresso测试中向下滚动屏幕?我需要验证屏幕上显示的文本

我正在执行以下测试以验证屏幕上的文本,文本显示在视图上,但需要页面滚动以手动查看文本.

 onView(withText("Launch")).check(ViewAssertions.matches(isDisplayed()));
    onView(withText("January 2010")).check(ViewAssertions.matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)

出现以下错误,但文本出现在视图中,但需要页面滚动才能手动查看文本.

android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError:'在屏幕上显示给用户'与所选视图不匹配.预期:在屏幕上显示给用户Got:"TextView {id = 2131361941,res-name = project_details_label_tv,visibility = VISIBLE,width = 249,height = 41,has-focus = false,has-focusable = false,has -window-focus = true,is-clickable = false,is-enabled = true,is-focused = false,is-focusable = false,is-layout-requested = false,is-selected = false,root-is-layout -requested = false,has-input-connection = false,x = 4.0,y = 24.0,text = Status,input-type = 0,ime-target = false,has-links = false}"

java android ui-automation android-espresso

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

如何从UI自动化模式提供程序返回错误?

假设我在自定义控件中实现了一些UIA模式.说,TablePattern.如果出现任何问题,现有实现将返回null.但是调试起来不太方便.我可能在自动化同行中有更多的上下文.例如,因为GetItem(int row, int column)我可能会说提供的参数超出范围而不是仅返回null.

如果我从自动化对等端抛出异常 - 在UIA客户端,我TargetInvocationExceptionIUIAutomationPatternInstance对象获得没有任何细节(InnerException属性为null).

有没有办法让UIA通过UIA-服务器端到UIA-客户端的一些附加信息传递错误?


UPD:经过一些调查并与评论中提供的示例@SimonMourier进行比较,我发现这TargetInvocationException是我的错.在这里修复它.

现在我得到了正确的异常类型,但只有标准的异常消息.因为IndexOutBoundsException它是"索引超出了数组的范围." 不管我在UIA服务器端试图将其置于例外状态.

不同之处在于我试图不通过标准的托管UIAutomationClient调用UIA方法,而是使用我自己的代码一直到COM调用(标准托管库不支持我想使用的自定义UIA模式).标准库传递异常消息就好了.我试图追踪差异,发现以下内容:

  • 标准管理库使呼叫P /通过InternallCall调用这里通过定义方法private static extern int RawGridPattern_GetItem(SafePatternHandle hobj, int row, int column, out SafeNodeHandle pResult);.它返回HRESULT,由CheckError方法通过调用来处理Marshal.ThrowExceptionForHR(hr);.此时出现正确消息的异常,就像在UIA服务器端抛出一样.
  • 我使用的UIAComWrapper看似相同的COM调用定义c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\UIAutomationClient.idlHRESULT GetItem ([in] int row, [in] int column, [out, retval] IUIAutomationElement ** element );.根据我对COM Interop的理解,重写返回值机制会自动检查HRESULT,必要时抛出异常,out result否则返回参数.除了异常消息由于某种原因没有被翻译之外,它确实存在.

要重现此问题,您可以尝试此项目.lib文件夹中的文件是从此存储库 …

.net c# wpf ui-automation

16
推荐指数
1
解决办法
1058
查看次数

如何让webDriver等待页面加载(C#Selenium项目)

我在C#开始了一个Selenium项目.尝试等待页面完成加载,然后才进行下一步操作.

我的代码看起来像这样:

 loginPage.GoToLoginPage();
        loginPage.LoginAs(TestCase.Username, TestCase.Password);
        loginPage.SelectRole(TestCase.Orgunit);
        loginPage.AcceptRole();
Run Code Online (Sandbox Code Playgroud)

在loginPage.SelectRole(TestCase.Orgunit)中:

 RoleHierachyLabel = CommonsBasePage.Driver.FindElement(By.XPath("//span[contains(text(), " + role + ")]"));
 RoleHierachyLabel.Click();
 RoleLoginButton.Click();
Run Code Online (Sandbox Code Playgroud)

我搜索元素RoleHierachyLabel.我一直在尝试使用多种方式等待页面加载或搜索元素属性允许一些超时:

1. _browserInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
Run Code Online (Sandbox Code Playgroud)
2. public static bool WaitUntilElementIsPresent(RemoteWebDriver driver, By by, int timeout = 5)
    {
        for (var i = 0; i < timeout; i++)
        {
            if (driver.ElementExists(by)) return true;
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

你会如何解决这个障碍?

c# pageload ui-automation selenium-firefoxdriver selenium-webdriver

16
推荐指数
2
解决办法
5万
查看次数

如何使用 playwright 在运行时实现浏览器大小调整?在端到端测试运行中

我们在量角器中有这样的: browser.driver.manage().window().setSize( width - 30, height );

剧作家如何实现这一目标?

automated-tests ui-automation typescript playwright playwright-test

16
推荐指数
1
解决办法
1万
查看次数