uwp UI自动化测试(WinAppDriver)

这篇具有很好参考价值的文章主要介绍了uwp UI自动化测试(WinAppDriver)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 UI自动化测试的好处就是在代码逻辑中写好 case 后,来实现 “一劳永逸” 的作用,并且自动化测试能够模拟人工达不到要求,比如快速切换页面、快速点击按钮等,对于提高软件的稳定性很有帮助。

安装的软件:

1、WinAppDriver

github : https://github.com/microsoft/winappdriver

上面有些 demo。Application Driver直接安装地址:https://github.com/Microsoft/WinAppDriver/releases

安装完成后,默认在系统的:C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe

这个工具的作用是你写的测试工程,通过本地 localhost(127.0.0.1)以 json 方式与 WinAppDriver 进行通信,使 WinAppDriver调用 win32 api来模拟屏幕操作,如果鼠标点击、拖拽、触屏手势等,后续据说会支持 xbox 手柄、hololens 等操作。

2、 inspect.exe

这个工具是用来查看运行软件(uwp、win32、win form、wpf)的 UI 元素的 Name、ID、Text 等等。包含在 Windows SDK 中。

安装完 Visual Studio2015后,可以在 C盘下找到:C:\Program Files (x86)\Windows Kits\10\bin\x64\inspect.exe

元素对照表:
uwp UI自动化测试(WinAppDriver)
这里以爱奇艺uwp作为示例,大概描述一下使用方式:

1、首先在启动 WinAppDriver.exe,运行界面:

路径:C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe
uwp UI自动化测试(WinAppDriver)
如果不运行它的话,UI自动化工程在运行单元测试的时候,vs 会抛异常:

/* 先启动 C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe,否则会抛异常
  Unexpected error. System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException: 由于目标计算机积极拒绝,无法连接。 127.0.0.1:4723
  在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
  在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
  --- 内部异常堆栈跟踪的结尾 ---
  在 OpenQA.Selenium.Appium.Service.AppiumCommandExecutor.Execute(Command commandToExecute)
  在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
*/

2、使用 inspect.exe 工具,确定软件运行时,需要触发事件 UI元素的 ID/Name

路径:C:\Program Files (x86)\Windows Kits\10\bin\x64\inspect.exe

例如,在 xaml 中,添加两个 Button:

第一个设置附加属性:AutomationProperties.AutomationId=“button_1”

第二个设置: x:Name=“button_2”

<StackPanel Width="500" Height="500" Background="Blue" Grid.RowSpan="3">
     <StackPanel.Resources>
         <Style TargetType="Button">
             <Setter Property="Margin" Value="10"/>
         </Style>
     </StackPanel.Resources>
     <Button AutomationProperties.AutomationId="button_1">AutomationId="button_1"</Button>
     <Button x:Name="button_2">x:Name="button_2"</Button>
 </StackPanel>

用 inspect 观测:

uwp UI自动化测试(WinAppDriver)
uwp UI自动化测试(WinAppDriver)
可以看出来,在 inspect 中 Name显示为 Button.Content 属性,如果是 TextBlock控件,Name则显示 TextBlock.Text 属性。

3、创建测试工程

1)创建普通的 C# 类库工程即可:

uwp UI自动化测试(WinAppDriver)
2)通过 nuget 引用相关类库:

uwp UI自动化测试(WinAppDriver)
3)获取 uwp 的启动 id,一个的方法右键点击 app 的快捷方式,选择属性:

uwp UI自动化测试(WinAppDriver)
uwp UI自动化测试(WinAppDriver)
3)工程中添加两个类 QyClientTestBase 和 PlayerPageScenarios,实现启动 爱奇艺uwp,从首页随机点击一个视频,跳转到播放页,播放3秒后,拖拽进度条到中间位置,然后再随机播放选集视频,在播放页递归播放。

public class QyClientTestBase
{
    // Note: append /wd/hub to the URL if you're directing the test at Appium
    protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";

    protected static WindowsElement Hanburg;

    protected static WindowsElement BackButton;
    protected static WindowsDriver<WindowsElement> QyClientSession;
    protected static string OriginalCalculatorMode;

    public static void BaseSetup(TestContext context)
    {
        if (QyClientSession == null)
        {
            // 启动爱奇艺 app
            DesiredCapabilities appCapabilities = new DesiredCapabilities();
            appCapabilities.SetCapability("app", "0C72C7CD.Beta_atj5cpqqdhzyp!App");
            appCapabilities.SetCapability("deviceName", "WindowsPC");
            QyClientSession = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
            Assert.IsNotNull(QyClientSession);
            QyClientSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3));
            
            Hanburg = QyClientSession.FindElementByName("Menu");

            // 已经在播放页时
            //BackButton = QyClientSession.FindElementByAccessibilityId("Back");
        }

        // 在首页时,汉堡按钮显示;在播放页时,Back按钮显示
        Assert.IsNotNull(Hanburg);
    }

    public static void BaseTearDown()
    {
        if (QyClientSession != null)
        {
            Hanburg = null;
            QyClientSession.Dispose();
            QyClientSession = null;
        }
    }        
}
[TestClass]
    public class PlayerPageScenarios : QyClientTestBase  // 子类型需要设置为 public,否则“测试资源管理器”中看不到
    {
        [ClassInitialize] //每个单元测试方法执行前,调用的初始化方法
        public static void Setup(TestContext context)
        {
            BaseSetup(context);
        }

        [ClassCleanup] //每个单元测试方法执行完成后,调用的清理方法
        public static void TearDown()
        {
            BaseTearDown();
        }

        bool isPlaying = false;

        [TestMethod]
        public void SliderClick()
        {

            if (isPlaying == false)
            {
                // 先从 app首页,随机播放一个视频,跳转到播放页
                PlayBRandom();
                
                Thread.Sleep(TimeSpan.FromSeconds(3));
                isPlaying = true;
            }
            
            ShowControls();

            //元素需要在页面中显示,如 Visibility="Collapsed" 则获取不到
            WindowsElement slider = QyClientSession.FindElementByAccessibilityId("slider_position"); //进度条

            Assert.IsNotNull(slider);

            //视频进度条拖动到中间位置
            QyClientSession.Mouse.MouseMove(slider.Coordinates, slider.Size.Width / 2, 0); 
            
            // seek进度
            slider.Click();
            Thread.Sleep(TimeSpan.FromSeconds(3));

            //随机播放页面中的一个视频
            PlayBRandom();

            Thread.Sleep(TimeSpan.FromSeconds(5));

            // 递归调用,在当前页面切换选集播放
            SliderClick();
        }

        /// <summary>
        /// 播放当前页面中的任意一个 B 对象
        /// </summary>
        void PlayBRandom()
        {
            var list = QyClientSession.FindElementsByName("QyClient._3._0.Model._B");

            if (list.Count > 0)
            {
                int min = isPlaying ? 0 : 30; //在app首页时,播放 30以后的 B对象

                int index = new Random().Next(min, list.Count - 1);

                WindowsElement e = list.ElementAt(index);
                e.Click();
            }
            Assert.AreNotEqual(list.Count, 0);

            Thread.Sleep(3000);
        }

        /// <summary>
        /// 显示播控栏,否则播控按钮获取不到
        /// </summary>
        void ShowControls()
        {
            WindowsElement win = QyClientSession.FindElementByAccessibilityId("mediaPlayer");
            win.Click();
            Thread.Sleep(500);
        }
    }

4)在“测试资源管理器” 中可以运行和断点调试测试:

uwp UI自动化测试(WinAppDriver)
5)运行测试,循环切换选集,播放视频

uwp UI自动化测试(WinAppDriver)
最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

uwp UI自动化测试(WinAppDriver)

uwp UI自动化测试(WinAppDriver)文章来源地址https://www.toymoban.com/news/detail-486245.html

到了这里,关于uwp UI自动化测试(WinAppDriver)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化测试系列 —— UI自动化测试

    UI 测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要,通过执行 UI 测试,测试人员将尝试模仿用户的行为

    2024年02月10日
    浏览(50)
  • Python Selenium UI自动化测试_python 自动化ui测试

    2.2 安装selenium pip install selenium pip install selenium==2.53.0 2.3 下载webdriver驱动 以chrome浏览器为例 查看chrome浏览器版本:在地址栏输入 chrome://version chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html 下载与浏览器版本对应的chrome driver 将下载好的chrome driver 解压,并放至到

    2024年04月14日
    浏览(75)
  • 【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

    本文大纲截图: UnitTest框架: PyTest框架: 框架: 框架英文单词 framework,为解决一类事情的功能的集合。需要按照框架的规定(套路)去书写代码。 概念:UnitTest是python自带的一个单元测试框架,用它来做单元测试 自带的框架:不需要单独按照,只要安装了 python就可以用

    2023年04月09日
    浏览(58)
  • 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)

    本文大纲截图:   日志: 用于记录系统运行时的信息,对一个事件的记录,也称为 Log 。 日志作用: 1)调试程序 2)了解系统程序运行的情况是否正常 3)系统程序运行故障分析与问题定位 4)用来做用户行为分析和数据统计 日志级别: 日志级别:指日志信息的优先级、重

    2024年02月12日
    浏览(46)
  • UI自动化概念+Web自动化测试框架

    1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 2.为什么对UI采用自动化

    2024年02月06日
    浏览(78)
  • 【UI自动化测试技术】自动化测试研究:Python+Selenium+Pytest+Allure,详解UI自动化测试,学习模拟鼠标+模拟键盘进行相关操作(精)(四)

    1、了解元素交互的常用方法 2、学习如何对多选元素进行操作 3、 学习模拟鼠标进行相关操作 ( 本节目标 ) 4、 学习模拟键盘进行相关操作 ( 本节目标 ) 用于向 Web 浏览器提供虚拟化设备输入操作的低级接口.除了刚刚讲过的Web元素交互之外, Actions 接口 还提供了对指定输

    2024年03月24日
    浏览(89)
  • UI自动化概念 + Web自动化测试框架介绍

    UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 从不同的阶段或层次来说,自动化测试可以分为单元测试、接口

    2024年02月08日
    浏览(70)
  • Ui自动化概念+Web自动化测试框架介绍

    目录 UI 1.UI自动化测试概念:我们先明确什么是UI 2.为什么对UI采用自动化测试? 3.什么项目适合做UI自动化测试? 4.UI自动化测试介入时机 5.UI自动化测试所属分类 Web自动化测试框架介绍 2.Selenium框架介绍及特点: Web自动化测试环境搭建 2.元素定位(一) idclassname,tagname定位 link text与

    2023年04月21日
    浏览(54)
  • Python Selenium UI自动化测试_python 自动化ui测试,Kotlin可能带来的一个深坑

    :层级选取,如:#formspaninput 举例:div.entry-sider-panelsection.entry-sider-panel__bddivdiv:nth-child(1) 3.3 元素操作 3.3.1 输入内容 send_keys() 3.3.2 点击元素 click() 3.3.3 清空元素文本内容 clear() 3.3.4 获取元素文本 text 返回的是字符串 3.3.5 获取元素尺寸 size 返回的是字典 3.3.6 获取元素的属性值

    2024年04月25日
    浏览(47)
  • UI自动化测试(APP测试)

    1、什么是自动化测试 概念:由程序代替人工进行系统校验的过程 1.1自动化测试能解决的问题? 回归测试 (冒烟测试) 针对之前老的功能进行测试 通过自动化的代码来实现。 针对上一个版本的问题的回归 兼容性测试 web实例化不同的浏览器驱动相当于对不同的浏览器进行操作

    2024年02月01日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包