QAUi系列指南 QAUi-实例实践 (六)

Then · 2018年11月14日 · 1009 次阅读

系列介绍

QAUi 系列阅读指南

  • 以 Android 为例,iOS 类似

androidconfig.xml 配置

<item>
            <name>com.test.Demo</name>
            <desc/>
            <capability>
                <autoLaunch>false</autoLaunch>
                <noReset>true</noReset>
                <appPackage>com.android.settings</appPackage>
                <appActivity>com.android.settings.MainSettings</appActivity>
            </capability>
</item>

Demo 类代码

package com.test;

import com.appium.ClassAssertException;
import com.appium.UiWatcher;
import com.task.BaseAndroidScene;
import com.task.TestCase;
import java.util.List;

public class Demo extends BaseAndroidScene implements Demo常量{
    @Override
    public void setup() {
        //当未找到元素时,自动处理权限弹出框
        OP.registerUiWatcher("异常处理", new UiWatcher() {
            @Override
            public boolean checkForCondition() {
                return OP.HandlePermission();
            }
        });
    }

    @Override
    public void teardown() {

    }

    @Override
    public void beforeTest(boolean lastcaseresult) {
        OP.closeApp();
       OP.launchApp();
    }

    @Override
    public void afterTest(boolean thiscaseresult) {
        OP.pressBACK(3,1000);
    }

    @TestCase(no = 100, name = "设置", desc = "设置功能遍历", runtime=1,retry=0,notefailcase=true)
    protected boolean 设置() throws ClassAssertException {
        //测试用例
        if(OP.findElement(设置_搜索栏).click()){
            OP.findElement(设置_搜索栏).sendText("test");
            OP.findElement(设置_搜索栏_返回).click();
        }
        ASSERT.True(CHECK.exist("设置",设置_搜索栏,设置_列表框),"未在设置界面");
        //取得设置列表的功能的名称
        List<String> funcs_list=OP.EXTEND_SWIPE().dragSeekbarTogetItems(OP.MobileBy(设置_列表框),OP.EXTEND_SWIPE().UP,OP.MobileBy(设置_列表框_功能子项),5,5);
        for(String name:funcs_list){
            //点击每个功能然后按返回键返回
            if(OP.EXTEND_SWIPE().dragSeekbarTo(OP.MobileBy(设置_列表框),OP.EXTEND_SWIPE().UP,5,5,OP.MobileBy(name),5).click()){
                OP.findElement(设置_返回).click();
            }
            ASSERT.True(CHECK.exist("设置"),"未在设置界面");
        }
        return true;//返回false或者抛出异常则判断该用例执行结果为失败
    }
}

Demo 常量接口类代码

package com.test;
public interface Demo常量 {
   String 设置_列表框="android:id/list";
   String 设置_列表框_功能子项="android:id/title";
   String 设置_搜索栏="android:id/input";
   String 设置_搜索栏_返回="miui:id/search_btn_cancel";
   String 设置_返回="miui:id/up";
}

测试报告解析

  • 通过测试视频可以看到,当在点击"网络和链接"后没有找到返回按钮,所以进行了一次异常处理
  • 通过视频和步骤得到当进入"流量使用情况"页面后,点击返回按钮,没有返回,然后断言失败抛出异常,导致用例失败;由此得到此处可能是小米的 bug,手动去检查手机,发现果然如此,点击返回无效!
  • 根据测试步骤信息,得到设置页面的功能子项名称
43. 2018-11-07 16:53:30.660 [INFO]:子项:我的设备,网络和连接,双卡和移动网
,WLAN,蓝牙,个人热点,流量使用情况,更多连接方式,个人,用户,显示,壁纸,个性主题,
声音和振动,系统和设备,锁屏密码和指纹,通知和状态栏,桌面与最近任务,全面屏,手机
分身,防打扰,存储空间,MIUI实验室,更多设置,帐号,小米帐号,同步,应用管理,系统应用,
更多应用,应用双开,授权管理,应用锁,问题反馈

测试视频

测试步骤信息

1. 2018-11-07 16:52:15.021 [INFO]:com.test.Demo类共1条用例.
2. 2018-11-07 16:52:15.023 [INFO]:用例序号:100,设置,执行次数=1
3. 2018-11-07 16:52:15.023 [INFO]:测试需执行用例共1条,开始执行...
4. 2018-11-07 16:52:15.024 [INFO]:序号100,用例<<设置>>开始执行...
5. 2018-11-07 16:52:15.025 [INFO]:准备操作beforeTest
6. 2018-11-07 16:52:15.028 [STEP]:关闭应用
7. 2018-11-07 16:52:15.029 [INFO]:线程休眠2500毫秒
8. 2018-11-07 16:52:22.749 [INFO]:关闭应用成功
9. 2018-11-07 16:52:22.753 [STEP]:启动应用入口(com.android.settings/com.android.settings.MainSettings)
10. 2018-11-07 16:52:23.647 [INFO]:休眠2秒
11. 2018-11-07 16:52:25.993 [INFO]:启动应用成功
12. 2018-11-07 16:52:25.994 [INFO]:准备完毕
13. 2018-11-07 16:52:28.236 [STEP]:点击(设置_搜索栏)
14. 2018-11-07 16:52:32.224 [STEP]:输入:test,(设置_搜索栏)
15. 2018-11-07 16:52:35.621 [STEP]:点击(设置_搜索栏_返回)
16. 2018-11-07 16:52:38.849 [CHECK]:检查:<<设置,设置_搜索栏,设置_列表框,>>存在;
17. 2018-11-07 16:52:38.850 [ASSERT]:<<未在设置界面>>未被抛出
18. 2018-11-07 16:52:40.764 [INFO]:开始:向上拖动设置_列表框,调整值=5,5
19. 2018-11-07 16:52:42.387 [STEP]:滑动(360,1339)(360,133),滑动时间=1500毫秒
20. 2018-11-07 16:52:46.223 [INFO]:结束:向上拖动设置_列表框,调整值=5,5
21. 2018-11-07 16:52:48.443 [INFO]:开始:向上拖动设置_列表框,调整值=5,5
22. 2018-11-07 16:52:50.097 [STEP]:滑动(360,1339)(360,133),滑动时间=1500毫秒
23. 2018-11-07 16:52:53.229 [INFO]:结束:向上拖动设置_列表框,调整值=5,5
24. 2018-11-07 16:52:56.020 [INFO]:开始:向上拖动设置_列表框,调整值=5,5
25. 2018-11-07 16:52:57.592 [STEP]:滑动(360,1339)(360,133),滑动时间=1500毫秒
26. 2018-11-07 16:53:00.646 [INFO]:结束:向上拖动设置_列表框,调整值=5,5
27. 2018-11-07 16:53:03.059 [INFO]:开始:向上拖动设置_列表框,调整值=5,5
28. 2018-11-07 16:53:04.574 [STEP]:滑动(360,1339)(360,133),滑动时间=1500毫秒
29. 2018-11-07 16:53:07.605 [INFO]:结束:向上拖动设置_列表框,调整值=5,5
30. 2018-11-07 16:53:09.917 [INFO]:开始:向下拖动设置_列表框,调整值=5,5
31. 2018-11-07 16:53:11.459 [STEP]:滑动(360,133)(360,1339),滑动时间=1500毫秒
32. 2018-11-07 16:53:14.592 [INFO]:结束:向下拖动设置_列表框,调整值=5,5
33. 2018-11-07 16:53:15.476 [INFO]:开始:向下拖动设置_列表框,调整值=5,5
34. 2018-11-07 16:53:17.049 [STEP]:滑动(360,133)(360,1339),滑动时间=1500毫秒
35. 2018-11-07 16:53:20.195 [INFO]:结束:向下拖动设置_列表框,调整值=5,5
36. 2018-11-07 16:53:20.768 [INFO]:开始:向下拖动设置_列表框,调整值=5,5
37. 2018-11-07 16:53:22.421 [STEP]:滑动(360,133)(360,1339),滑动时间=1500毫秒
38. 2018-11-07 16:53:25.376 [INFO]:结束:向下拖动设置_列表框,调整值=5,5
39. 2018-11-07 16:53:26.085 [INFO]:开始:向下拖动设置_列表框,调整值=5,5
40. 2018-11-07 16:53:27.638 [STEP]:滑动(360,133)(360,1339),滑动时间=1500毫秒
41. 2018-11-07 16:53:30.658 [INFO]:结束:向下拖动设置_列表框,调整值=5,5
42. 2018-11-07 16:53:30.659 [INFO]:设置_列表框向上共找到34个子项:设置_列表框_功能子项,调整值:5,5
43. 2018-11-07 16:53:30.660 [INFO]:子项:我的设备,网络和连接,双卡和移动网络,WLAN,蓝牙,个人热点,流量使用情况,更多连接方式,个人,用户,显示,壁纸,个性主题,声音和振动,系统和设备,锁屏密码和指纹,通知和状态栏,桌面与最近任务,全面屏,手机分身,防打扰,存储空间,MIUI实验室,更多设置,帐号,小米帐号,同步,应用管理,系统应用,更多应用,应用双开,授权管理,应用锁,问题反馈
44. 2018-11-07 16:53:30.667 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("我的设备")
45. 2018-11-07 16:53:31.793 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("我的设备"),找到
46. 2018-11-07 16:53:33.447 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("我的设备"))
47. 2018-11-07 16:53:38.244 [STEP]:点击(设置_返回)
48. 2018-11-07 16:53:41.099 [CHECK]:检查:<<设置,>>存在;
49. 2018-11-07 16:53:41.100 [ASSERT]:<<未在设置界面>>未被抛出
50. 2018-11-07 16:53:41.101 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("网络和连接")
51. 2018-11-07 16:53:41.970 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("网络和连接"),找到
52. 2018-11-07 16:53:43.547 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("网络和连接"))
53. 2018-11-07 16:53:50.897 [WARN]:未找到元素:设置_返回
54. 2018-11-07 16:53:52.611 [INFO]:UiWatcher:开始处理异常...
55. 2018-11-07 16:53:52.613 [INFO]:开始处理权限管理...
56. 2018-11-07 16:53:59.205 [INFO]:未找到元素:By.AndroidUIAutomator: new UiSelector().className("android.widget.Button").textMatches(".*[好的|同意|确定|允许|确认|知道|立即删除|关闭|重启应用].*")
57. 2018-11-07 16:53:59.209 [INFO]:点击失败(By.AndroidUIAutomator: new UiSelector().className("android.widget.Button").textMatches(".*[好的|同意|确定|允许|确认|知道|立即删除|关闭|重启应用].*"))
58. 2018-11-07 16:53:59.210 [INFO]:处理权限管理完成.共处理0个权限提示
59. 2018-11-07 16:53:59.211 [WARN]:UiWatcher:未成功处理异常.
60. 2018-11-07 16:54:01.778 [WARN]:仍然未找到元素:设置_返回
61. 2018-11-07 16:54:01.779 [INFO]:点击失败(设置_返回)
62. 2018-11-07 16:54:03.739 [CHECK]:检查:<<设置,>>存在;
63. 2018-11-07 16:54:03.739 [ASSERT]:<<未在设置界面>>未被抛出
64. 2018-11-07 16:54:03.740 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("双卡和移动网络")
65. 2018-11-07 16:54:04.665 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("双卡和移动网络"),找到
66. 2018-11-07 16:54:06.402 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("双卡和移动网络"))
67. 2018-11-07 16:54:10.159 [STEP]:点击(设置_返回)
68. 2018-11-07 16:54:13.021 [CHECK]:检查:<<设置,>>存在;
69. 2018-11-07 16:54:13.022 [ASSERT]:<<未在设置界面>>未被抛出
70. 2018-11-07 16:54:13.023 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("WLAN")
71. 2018-11-07 16:54:13.908 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("WLAN"),找到
72. 2018-11-07 16:54:15.553 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("WLAN"))
73. 2018-11-07 16:54:20.231 [STEP]:点击(设置_返回)
74. 2018-11-07 16:54:23.087 [CHECK]:检查:<<设置,>>存在;
75. 2018-11-07 16:54:23.089 [ASSERT]:<<未在设置界面>>未被抛出
76. 2018-11-07 16:54:23.090 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("蓝牙")
77. 2018-11-07 16:54:23.944 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("蓝牙"),找到
78. 2018-11-07 16:54:25.575 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("蓝牙"))
79. 2018-11-07 16:54:29.151 [STEP]:点击(设置_返回)
80. 2018-11-07 16:54:31.999 [CHECK]:检查:<<设置,>>存在;
81. 2018-11-07 16:54:32.000 [ASSERT]:<<未在设置界面>>未被抛出
82. 2018-11-07 16:54:32.000 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("个人热点")
83. 2018-11-07 16:54:32.812 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("个人热点"),找到
84. 2018-11-07 16:54:34.452 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("个人热点"))
85. 2018-11-07 16:54:37.982 [STEP]:点击(设置_返回)
86. 2018-11-07 16:54:40.862 [CHECK]:检查:<<设置,>>存在;
87. 2018-11-07 16:54:40.863 [ASSERT]:<<未在设置界面>>未被抛出
88. 2018-11-07 16:54:40.863 [INFO]:开始:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("流量使用情况")
89. 2018-11-07 16:54:41.731 [INFO]:结束:向上拖动设置_列表框,调整值=5,5,寻找By.AndroidUIAutomator: new UiSelector().text("流量使用情况"),找到
90. 2018-11-07 16:54:43.444 [STEP]:点击(By.AndroidUIAutomator: new UiSelector().text("流量使用情况"))
91. 2018-11-07 16:54:47.478 [STEP]:点击(设置_返回)
92. 2018-11-07 16:54:50.357 [CHECK]:检查:<<>>存在;
93. 2018-11-07 16:54:50.358 [WARN]:检查:<<设置,>>不存在;
94. 2018-11-07 16:54:52.043 [ERROR]:<<未在设置界面>>被抛出
95. 2018-11-07 16:54:52.046 [INFO]:结束操作afterTest
96. 2018-11-07 16:54:53.984 [STEP]:连续按下3次BACK按钮
97. 2018-11-07 16:54:57.295 [INFO]:结束完毕
98. 2018-11-07 16:54:58.801 [ERROR]:用例<<设置>>执行完毕,测试失败

微信消息截图

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册