我正在使用自动化来测试应用程序,但有时我想通过批处理文件启动应用程序.当我运行"process.WaitForInputIdle(100)"时,我收到一个错误:
"WaitForInputIdle失败.这可能是因为该进程没有图形界面."
如何判断进程是否具有图形界面?
我需要自动化Winform应用程序.如何设置AutomationID(或AutomationName)像本文中的XAML 一样?
从这个堆栈溢出文章看,答案似乎是否定,除非我将应用程序切换到WPF应用程序(因此我可以使用XAML来定义控件).
我尝试过这种天真的方法:
AutomationElement formAutomation = AutomationElement.FromHandle(this.Handle);
formAutomation.Current.Name = "SandboxResponseDialogName";
formAutomation.Current.ClassName = "SandboxResponseDialogClassName";
formAutomation.Current.AutomationId = "SandboxResponseDialogID;
Run Code Online (Sandbox Code Playgroud)
但是在控制构造函数的这一点上,这些Automation属性只有getter; 没有二传手.
我正在学习UI自动化,我发现我的"Inspect Object"克隆显示IsKeyboardFocusable即使是真的也总是假的,所有其他信息都是相同的(从图像中可以看出).有没有人知道为什么我在检索值时将此属性视为false?

我有Android应用程序,我想使用Espresso框架来创建测试自动化工具和测试.但我不想在我的应用程序中创建一些东西,并希望使用Espresso的单独模块启动我的应用程序并使用Espresso进行测试.我使用Android Studio.那么..你有什么想法如何解决这个问题?
我做自动化测试并获得文件对话框.我想从带有python或selenium的windows打开文件对话框中选择一个文件.
注意:该对话框由其他程序提供.我不想用Tkinter创建它.
窗口看起来像:
.
这该怎么做?
我们正在使用棱镜和WPF来构建应用程序.最近我们开始使用UI Automation(UIA)来测试我们的应用程序.但是当我们运行UIA测试时会发生一些奇怪的行为.这是简化的shell:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock
Grid.Row="0" Grid.Column="0"
Name="loadingProgressText"
VerticalAlignment="Center" HorizontalAlignment="Center"
Text="Loading, please wait..."/>
<Border
Grid.Row="0"
x:Name="MainViewArea">
<Grid>
...
</Grid>
</Border>
<!-- Popup -->
<ContentControl
x:Name="PopupContentControl"
Grid.Row="0"
prism:RegionManager.RegionName="PopupRegion"
Focusable="False">
</ContentControl>
<!-- ErrorPopup -->
<ContentControl
x:Name="ErrorContentControl"
Grid.Row="0"
prism:RegionManager.RegionName="ErrorRegion"
Focusable="False">
</ContentControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
在我们的应用程序中,我们使用图层(Popup和ErrorPopup)来隐藏MainViewArea,以拒绝访问控件.为了表明Popup,我们使用下一个方法:
//In constructor of current ViewModel we store _popupRegion instance to the local variable:
_popupRegion = _regionManager.Regions["PopupRegion"];
//---
private readonly Stack<UserControl> _popups = new Stack<UserControl>();
public …Run Code Online (Sandbox Code Playgroud) 如何在UiAutomator Android中的事件点击之间提供延迟.
第一个事件是在EditText中输入一个URL:
new UiObject(new UiSelector().text("Search here")).setText("abc.com");
getUiDevice.waitForIdle(15000);
Run Code Online (Sandbox Code Playgroud)
这里我在webview中加载一个网页.所以当url加载完成时,我需要检查第二个事件.
第二个事件是检查对象的内容描述:
UiObject curClass = new UiObject(new UiSelector().className("android.widget.RelativeLayout"));
UiObject yCur = curClass.getChild(new UiSelector().description("ye"));
getCurCol();
public void getCurCol() throws UiObjectNotFoundException {
try {
if (yCur.getContentDescription() != null)
report.append("Success");
} catch (Exception e) {
System.err.println("\nCaught Exception: " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有起作用.
我只是希望应用程序在检查第二个事件之前等待一段时间.
我知道这三种方法是为UI Automator的延迟提供的 -
public void waitForIdle(long timeout)
public void waitForIdle()
public boolean waitForWindowUpdate(String packageName, long timeout)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用这些方法.
请给我一个如何使用这些的例子.
任何帮助,将不胜感激.
谢谢!
背景:
我需要在另一台显示器上创建调光效果.我想我通过使用WPF窗口解决了这个问题,该窗口占用了整个屏幕尺寸Topmost和AllowsTransparency=.它具有内部黑色发光效果,并且具有WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW应用于其中的样式(以及其他内容),以允许用户点击其后面的应用程序.
我监视EVENT_OBJECT_REORDERWindows 中的事件并调用SetWindowPos强制Topmost状态高于其他Topmost窗口.到目前为止,我的概念测试证明似乎运作良好.
我发现的问题是这个调光(窗口)会覆盖任务栏,但是如果我单击开始菜单则不会.我目前正在使用Windows 10进行测试.如果单击"开始"菜单,则会导致"开始"菜单和任务栏显示在调光(窗口)上方.我希望一切都保持黯淡.
我通过uiAccess在应用程序清单中设置= true 来解决此问题,生成自签名证书,并将exe复制到"c:\ program files*".这允许我强制窗口的最顶级状态,甚至在开始菜单上方.
我的问题:
有没有办法在没有开始菜单的情况下定位窗口uiAccess?或者甚至是另一种在不使用窗口的情况下强制屏幕昏暗(但不依赖于显示器驱动程序或硬件功能)的方法?
如果没有,在分发WPF应用程序(通过WiX安装项目或类似的东西)时,我需要注意什么,以绕过UIPI限制uiAccess= True?我可以在安装过程中简单地安装自签名证书吗?用户是否会遇到任何其他障碍?作为一名开发人员,在构建此问题时,我是否会遇到任何其他障碍(除了我已经提到过的内容)?
谢谢!
我想知道,在.NET中,如果(托管)Microsoft UI自动化框架提供了某种方法来实例化AutomationElement给定AutomationId窗口值的类型,则以这种方式抑制需要通过窗口句柄或其他类型的窗口来搜索窗口身份标识.
用VB.NET编写的伪示例,用于理解我的目的:
Dim automationId As Integer = 1504
Dim element As AutomationElement = AutomationElement.FromAutomationId(automationId)
Run Code Online (Sandbox Code Playgroud) 有没有一个框架可以用来在 Kotlin Compose 项目中自动化 UI 回归测试?单击 Android StudioRun -> Record Expresso Test会出现警告:Espresso Testing Framework does not support Compose projects.
android ui-automation kotlin expresso android-jetpack-compose