摘要
在我的WPF应用程序中,我需要一个带左侧按钮的TabControl,所以我用我想要的布局定义了一个ControlTemplate,它运行正常.
但是,我的测试人员的自动测试工具无法看到选项卡的任何内容,包括当前选定的选项卡.
问题:如何通过自动化测试工具保持我的TabControl可测试,同时仍然定义ControlTemplate?
细节
我正在使用WPF 3.5开发WPF应用程序
我的测试人员正在使用一个名为QTP的自动测试工具
他说他可以使用UISpy.exe测试任何你能看到的内容
示例WPF应用程序(Xaml):
<Window x:Class="TabControlTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Tab Control Test"
Height="300"
Width="300">
<Window.Resources>
<ControlTemplate x:Key="ButtonsOnLeftTabLayout"
TargetType="{x:Type TabControl}">
<DockPanel>
<StackPanel DockPanel.Dock="Left"
IsItemsHost="True" />
<ContentPresenter Content="{TemplateBinding SelectedContent}" />
</DockPanel>
</ControlTemplate>
</Window.Resources>
<TabControl Template="{StaticResource ButtonsOnLeftTabLayout}">
<TabItem Header="Tab 1">
<StackPanel>
<Button HorizontalAlignment="Center">Button 1</Button>
</StackPanel>
</TabItem>
<TabItem Header="Tab 2">
<StackPanel>
<Button HorizontalAlignment="Center">Button 2</Button>
</StackPanel>
</TabItem>
</TabControl>
</Window>
Run Code Online (Sandbox Code Playgroud)
到目前为止我的搜索结果:
(搜索之后我终于找到了答案,但它花了比我想象的更长的时间,而且AutomationPeer的早期发现确实是错误的,所以我把它写成一个SO问题并自我回答,以防它在将来帮助其他人)
我正在制作一个小型测试框架,它使用JavaScript模块模式在iOS上进行UI自动化测试.但是,基于#import和扩展模块,我似乎得到了奇怪的结果.
我有一个基本测试模块叫Tester-Module.js:
(function() {
var Tester = this.Tester = {};
Tester.setUp = function() {
UIALogger.logMessage('Regular SetUp()');
}
}).call(this);
Run Code Online (Sandbox Code Playgroud)
如果我在我的测试用例中导入此模块,它可以正常工作.这是测试文件tester.js(tester.js我在Instruments中导入的文件):
#import "./Tester-Module.js"
// Prints 'Regular SetUp()'
Tester.setUp();
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试Tester-Module.js在另一个模块文件中扩展模块,我就无法引用Tester对象.Tester-Extension.js扩展了以下定义的Tester模块Tester-Module.js:
#import "./Tester-Module.js"
// Outputs:
// Exception raised while running script:
// ReferenceError: Can't find variable: Tester\n
Tester.setUp = function() {
UIALogger.logMessage('Overwritten SetUp()');
}
Run Code Online (Sandbox Code Playgroud)
更新的测试用例文件tester.js:
#import "./Tester-Extension.js"
// Exception is thrown before this
Tester.setUp();
Run Code Online (Sandbox Code Playgroud)
我希望相关的问题是:
为什么我不能在里面引用Tester对象Tester-Extension.js,但可以在 …
我几乎没有资源在数百个不同网页的许多项目上进行测试,最繁琐的部分是验证网站的外观和感觉是否正常.特别是HTML元素的布局不会被破坏.
有没有办法通过不开发高度复杂的AI工具来自动化这种测试?:)
我正在研究UIAutomation.我需要在应用程序处于后台时更改位置.我试过以下代码行:
var target = UIATarget.localTarget();
UIATarget.localTarget().deactivateAppForDuration(30);
target.setLocation({longitude:77.50, latitude:12.50});
Run Code Online (Sandbox Code Playgroud)
但是target.setLocation直到应用程序到达前台才会被调用.
任何人都可以告诉我如何在应用程序处于后台时更改位置.
我目前正在使用库UIAutomation PS Extensions(https://uiautomation.codeplex.com/)自动安装GUI应用程序.当我针对现有的Windows用户会话运行它时,它的效果非常好.我运行我的PS脚本,它打开一个窗口,我可以点击按钮等等..
但是,从远程计算机调用此库时会出现问题.我通过PsExec从远程机器调用我的脚本(应该打开一个GUI窗口并开始控制它).这导致脚本无法在远程计算机上打开GUI窗口并开始产生各种异常.
作为解决方法,我可以使PsExec连接到远程主机上的特定现有会话,但不幸的是这不稳定,因为我无法保证会话的存在.
enyone是否知道是否可以强制PowerShell打开新的会话(交互式GUI),通过它我可以调用UIAutomation命令?
提前谢谢马修
powershell automation psexec ui-automation microsoft-ui-automation
该代码适用于Word和Outlook但PowerPoint失败,因为只有文本框的第一个字符或第一个字被选中.这是一个错误吗?有没有解决方法?在PowerPoint 2013中的简单PowerPoint幻灯片上试试这个.
private static async Task<string> getText(double x, double y)
{
string result = null;
try
{
var location = new System.Windows.Point(x, y);
AutomationElement element = AutomationElement.FromPoint(location);
object patternObj;
if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj))
{
var textPattern = (TextPattern)patternObj;
var range = textPattern.RangeFromPoint(location);
range.ExpandToEnclosingUnit(TextUnit.Word);
range.Select();
var text = range.GetText(-1).TrimEnd('\r');
return text.Trim();
}
else
{
return "no text found";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
Run Code Online (Sandbox Code Playgroud)
您无法从屏幕截图中看到它,但鼠标处于"先"而不是"卡住",但无论鼠标放在何处,它总是卡住.也许这是在PowerPoint 2016中修复的?
当我查看范围的边界框时,它始终是整个元素,而不是选定的单词.这可能是RangeToPoint无法正常工作的问题的一部分.
原帖在MSDN上发布但没有回复......
更新.如果我使用
text = printRange(range, text);
while …Run Code Online (Sandbox Code Playgroud) 我正在做的事情:
我正在尝试使用pywinauto在python中创建脚本以在后台自动安装notepad ++(隐藏或最小化),notepad ++只是一个示例,因为我将编辑它以与其他软件一起使用.
问题:
问题是我想在隐藏或最小化安装程序时执行此操作,但如果我移动鼠标,脚本将停止工作.
题:
如何隐藏或最小化notepad ++安装程序,如何执行此脚本并使其正常工作.
到目前为止这是我的代码:
import sys, os, pywinauto
pwa_app = pywinauto.application.Application()
app = pywinauto.Application().Start(r'npp.6.8.3.Installer.exe')
Wizard = app['Installer Language']
Wizard.NextButton.Click()
Wizard = app['Notepad++ v6.8.3 Setup']
Wizard.Wait('visible')
Wizard['Welcome to the Notepad++ v6.8.3 Setup'].Wait('ready')
Wizard.NextButton.Click()
Wizard['License Agreement'].Wait('ready')
Wizard['I &Agree'].Click()
Wizard['Choose Install Location'].Wait('ready')
Wizard.Button2.Click()
Wizard['Choose Components'].Wait('ready')
Wizard.Button2.Click()
Wizard['Create Shortcut on Desktop'].Wait('enabled').CheckByClick()
Wizard.Install.Click()
Wizard['Completing the Notepad++ v6.8.3 Setup'].Wait('ready', timeout=30)
Wizard['CheckBox'].Wait('enabled').Click()
Wizard.Finish.Click()
Wizard.WaitNot('visible')
Run Code Online (Sandbox Code Playgroud) 我想使用屏幕截图测试我的 React Native 应用程序。UIAutomation javascript 文件将由fastlane执行,并且应该为我提供我需要的所有子视图。这部分工作正常。
我的主要问题是我不明白我是如何点击元素的。我发现的每个示例都是简单的 Objective-c,并使用标准元素进行导航,如标签栏。我的应用程序有一个汉堡图标,它有一个点击事件,TouchableHighlight可以打开一个菜单。我正在寻找引用单个TouchableHighlight元素以与其交互的可能性。
此类答案的加分点,无需我编写 Objective-C。
我正在尝试通过 XCTest 自动化我的 mac 应用程序。在尝试从 XCode 录制应用程序时,我收到以下错误消息:
当我点击按钮时会发生这种情况。按钮层次结构是..
按钮 -> 堆栈视图 -> NSView
这里,按钮是 NSButton 的子类,我在堆栈视图中添加了按钮。该堆栈视图已添加到 myView(NSView 的子类)中。
PS:每个按钮都有图像视图和标签。
题:
除了使用基本的 Sikuli 之外,我还是 Windows 应用程序自动化的新手。
我检查了一些选项,如 PyAutoGUI、PyWinAuto。哪个是 Sikuli、PyAutoGUI、PyWinAuto 或任何其他工具之外的第 3 方 Windows 应用程序自动化的最佳工具?
首选 - 跨平台工具(Mac 和 Windows)
ui-automation ×10
automation ×4
ios ×3
javascript ×2
c# ×1
fastlane ×1
macos ×1
powerpoint ×1
powershell ×1
psexec ×1
python ×1
pywinauto ×1
qtp ×1
react-native ×1
record ×1
testing ×1
web ×1
web-testing ×1
wpf ×1
xcode ×1