标签: ui-automation

如何在不破坏自动化测试的情况下为我的TabControl定义ControlTemplate?

摘要

在我的WPF应用程序中,我需要一个带左侧按钮的TabControl,所以我用我想要的布局定义了一个ControlTemplate,它运行正常.

但是,我的测试人员的自动测试工具无法看到选项卡的任何内容,包括当前选定的选项卡.

问题:如何通过自动化测试工具保持我的TabControl可测试,同时仍然定义ControlTemplate?


细节

我正在使用WPF 3.5开发WPF应用程序
我的测试人员正在使用一个名为QTP的自动测试工具
他说他可以使用UISpy.exe测试任何你能看到的内容

  • 当我使用没有应用模板的直接TabControl时,UISpy可以看到当前所选选项卡的内容.
  • 但是,当我使用ContentTemplate更改布局(下面显示的代码)时,UISpy仍然可以看到选项卡标题...但它无法看到内容.

示例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编写自定义TabControl的一堆内容(例如MSFT对论坛问题UI自动化的回答:访问ControlTemplate中的控件,博客发布自定义控件和UI自动化).但是我的每一个本能都说这是疯狂的矫枉过正,"必须有一种更简单的方法!"
  • 关于为ContentPresenter提供名称,x:名称或AutomationProperties.AutomationId的一些建议 - 没有任何效果

(搜索之后我终于找到了答案,但它花了比我想象的更长的时间,而且AutomationPeer的早期发现确实是错误的,所以我把它写成一个SO问题并自我回答,以防它在将来帮助其他人)

wpf automated-tests qtp ui-automation

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

#import如何在iOS的UI自动化中工作?

我正在制作一个小型测试框架,它使用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,但可以在 …

javascript ui-automation ios ios-ui-automation

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

有没有办法自动化网页的"外观和感觉"测试?

我几乎没有资源在数百个不同网页的许多项目上进行测试,最繁琐的部分是验证网站的外观和感觉是否正常.特别是HTML元素的布局不会被破坏.

有没有办法通过不开发高度复杂的AI工具来自动化这种测试?:)

testing user-interface web-testing ui-automation web

7
推荐指数
2
解决办法
9332
查看次数

UIAutomation:当应用程序处于后台时更改位置

我正在研究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直到应用程序到达前台才会被调用.

任何人都可以告诉我如何在应用程序处于后台时更改位置.

ui-automation ios ios-ui-automation

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

PowerShell打开UIAutomation的远程GUI会话

我目前正在使用库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

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

当我尝试使用UI Automation的UI自动化时,我只能在使用RangeFromPoint时获得第一个字符/单词

该代码适用于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)

c# powerpoint automation ui-automation

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

Python - 在窗口最小化或隐藏时使用pywinauto控制窗口

我正在做的事情:

我正在尝试使用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)

python automation ui-automation pywinauto

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

如何在 React Native 中截屏测试?

我想使用屏幕截图测试我的 React Native 应用程序。UIAutomation javascript 文件将由fastlane执行,并且应该为我提供我需要的所有子视图。这部分工作正常。

我的主要问题是我不明白我是如何点击元素的。我发现的每个示例都是简单的 Objective-c,并使用标准元素进行导航,如标签栏。我的应用程序有一个汉堡图标,它有一个点击事件,TouchableHighlight可以打开一个菜单。我正在寻找引用单个TouchableHighlight元素以与其交互的可能性。

此类答案的加分点,无需我编写 Objective-C。

javascript ui-automation ios react-native fastlane

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

记录器服务错误:鼠标左键按下:找不到匹配的元素 - Xcode 错误

我正在尝试通过 XCTest 自动化我的 mac 应用程序。在尝试从 XCode 录制应用程序时,我收到以下错误消息:

在此处输入图片说明

当我点击按钮时会发生这种情况。按钮层次结构是..

按钮 -> 堆栈视图 -> NSView

这里,按钮是 NSButton 的子类,我在堆栈视图中添加了按钮。该堆栈视图已添加到 myView(NSView 的子类)中。

PS:每个按钮都有图像视图和标签。

题:

  • 当我点击按钮时,应用程序崩溃并显示上述警报。有什么解决办法吗?

macos xcode automation record ui-automation

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

哪个是自动化第三方窗口应用程序的最佳工具?

除了使用基本的 Sikuli 之外,我还是 Windows 应用程序自动化的新手。

我检查了一些选项,如 PyAutoGUI、PyWinAuto。哪个是 Sikuli、PyAutoGUI、PyWinAuto 或任何其他工具之外的第 3 方 Windows 应用程序自动化的最佳工具?

首选 - 跨平台工具(Mac 和 Windows)

ui-automation

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