<span id="Label3"></p><p><p>Let's start with the first simple Android UI Automation test</p></p><p><p>1. Use the ADB command to connect to a real machine or simulator<br>2. Open the Uiautomatorviewer tool<br>3. Use the Uiautomatorviewer tool to get an app's elements for positioning<br>4. A brief introduction to the use of the UnitTest framework<br>5. Using Python to write cat ning time attendance Application Registration module automated Testing</p></p><p><p><strong>1. Use the ADB command to connect to the real machine or emulator:</strong><br>Mobile phone USB connection to the computer, into the developer mode;</p></p><p><p>CMD command: adb devices to see if the phone is connected</p></p><p><p><br>Display Error</p></p><p><p>This is because the ADB port is occupied and we need to see what application is taking up this port (5037 is the ADB default port)</p></p><p><p>CMD command: netstat-aon|findstr "5037"</p></p><p><p></p></p><p><p>You can see the 5037 port corresponding to the Program's PID number is 8388;</p></p><p><p>CMD command: tasklist|findstr "8388"</p></p><p><p></p></p><p><p>It can be seen that the 8388 corresponding program is kadb.exe, indicating that the program is using 5037 ports;</p></p><p><p>At this point we need to end the Kadb.exe process in the task manager, press the shortcut key "ctrl+shift+esc" to bring up the Windows task manager, find "kadb.exe", Click the end Process below!</p></p><p><p></p></p><p><p>We run the cmd command again: ADB devices</p></p><p><p></p></p><p><p>After this step is successful, we can run the Sdk's own uiautomatorviewer;<br>We need to use the Uiautomatorviewer tool to get the elements for Positioning.</p></p><p><p>CMD command: uiautomatorviewer, Open Uiautomatorviewer interface</p></p><p><p></p></p><p><p>Or find the SDK directory: sdk\tools find uiautomatorviewer.bat file double-click run</p></p><p><p></p></p><p><p><strong>2. Open the Uiautomatorviewer tool</strong></p></p><p><p></p></p><p><p>We can locate them based on elements such as Text,resource-id,class.</p></p><p><p><strong>3. Use the Uiautomatorviewer tool to get an app's elements for positioning</strong></p></p><p><p>Here I write a test script using Python's own idle, open the Python file to find the idle (python GUI) double-click open,</p></p><p><p></p></p><p><p><strong>4. A brief introduction to the use of the UnitTest framework</strong></p></p><pre class="prettyprint"><code class=" hljs python"><span class="hljs-comment"><span class="hljs-comment">#-*-coding:utf-8-*-</span></span><span class="hljs-keyword"><span class="hljs-keyword"></span> from</span>Uiautomator<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>Device<span class="hljs-keyword"><span class="hljs-keyword"></span> as</span>D<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>UnitTest<span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">Mytest</span><span class="hljs-params">(unittest. TestCase)</span>:</span></span> <span class="hljs-comment"><span class="hljs-comment">#初始化工作</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">setUp</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------initialization work"</span></span> <span class="hljs-comment"><span class="hljs-comment">#退出清理工作</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">tearDown</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------quit cleanup work"</span></span> <span class="hljs-comment"><span class="hljs-comment">#测试点击猫宁考勤case</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">test_login</span><span class="hljs-params">(self)</span>:</span></span>D (text=<span class="hljs-string"><span class="hljs-string">"cat Better attendance"</span></span>). Click ()<span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------test 1"</span></span> <span class="hljs-comment"><span class="hljs-comment">#测试2</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">test_z</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------test 2"</span></span> <span class="hljs-comment"><span class="hljs-comment">#这里你可以写你的第二个测试用例,</span></span> <span class="hljs-comment"><span class="hljs-comment">#测试3</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">test_w</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------test 3"</span></span> <span class="hljs-comment">#这里你可以写你的第三个测试用例 ........ <span class="hljs-comment"> </span></span><span class="hljs-keyword"><span class="hljs-keyword">if</span></span>__name__ = =<span class="hljs-string"><span class="hljs-string">' __main__ '</span></span>: Unittest.main ()</code></pre>The results are as follows:<p><p>Testing started at 21:14 ...<br>———— – Initialization work<br>———— – Test 1<br>———— – Exit cleanup work<br>———— – Initialization work<br>———— – Test 3<br>———— – Exit cleanup work<br>———— – Initialization work<br>———— – Test 2<br>———— – Exit cleanup work</p></p><p><p>Process finished with exit code 0</p></p><p><p>From the results we can see that the UnitTest framework works as Follows:<br>SetUp Test 1 TearDown<br>SetUp Test 2 TearDown<br>SetUp Test 3 TearDown</p></p><p><p><strong>5. Using Python to write cat ning time attendance Application Registration module automated Testing</strong></p></p><pre class="prettyprint"><code class=" hljs python"><span class="hljs-comment"><span class="hljs-comment">#-*-coding:utf-8-*-</span></span><span class="hljs-keyword"><span class="hljs-keyword"></span> from</span>Uiautomator<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>Device<span class="hljs-keyword"><span class="hljs-keyword"></span> as</span>D<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>Time<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>UnitTest<span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">mytestsuite</span><span class="hljs-params">(unittest. TestCase)</span>:</span></span> <span class="hljs-comment"><span class="hljs-comment"># initialization Work</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">setUp</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------initialization work"</span></span> <span class="hljs-comment"><span class="hljs-comment"># quit cleanup work</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">tearDown</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">"--------------quit cleanup work"</span></span> <span class="hljs-comment"><span class="hljs-comment">#*************************** Method **************************************</span></span> <span class="hljs-comment"><span class="hljs-comment"># Determine if the control exists & text</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">check_controls_exists</span><span class="hljs-params">(self, controls_text)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">if</span></span>D (text=controls_text). exists:<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-number"><span class="hljs-number">1</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>:<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-number"><span class="hljs-number">0</span></span> <span class="hljs-comment"><span class="hljs-comment"># Determine if the button is gray & text & clickable</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">check_controls_click_text</span><span class="hljs-params">(self, controls_text)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">if</span></span>D (text=controls_text). Info.get (<span class="hljs-string"><span class="hljs-string">"clickable"</span></span>)<span class="hljs-keyword"><span class="hljs-keyword"></span> is</span> <span class="hljs-keyword"><span class="hljs-keyword">True</span></span>:<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-number"><span class="hljs-number">1</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>:<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-number"><span class="hljs-number">0</span></span> <span class="hljs-comment"><span class="hljs-comment">#assertIn (a, B) A in B</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">check_ainb</span><span class="hljs-params">(self,resourceid,b)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">if</span></span>D (resourceid=resourceid). Info.get (<span class="hljs-string"><span class="hljs-string">"text"</span></span>)<span class="hljs-keyword"><span class="hljs-keyword">inch</span></span>B:<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-number"><span class="hljs-number">1</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>:<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-number"><span class="hljs-number">0</span></span> <span class="hljs-comment"><span class="hljs-comment">#***********************************************************</span></span> <span class="hljs-comment"><span class="hljs-comment"># Registration Module</span></span> <span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">test_aregister</span><span class="hljs-params">(self)</span>:</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Try</span></span>: Time.sleep (<span class="hljs-number"><span class="hljs-number">2</span></span>)<span class="hljs-comment"><span class="hljs-comment">#猫宁考勤开启全新时代</span></span>Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"register"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-string"><span class="hljs-string">u "cat better attendance open new era"</span></span>)<span class="hljs-comment"><span class="hljs-comment"># Cat Better attendance open a new Era-"click The Register button to enter the registered Cat Ning interface</span></span>D (text=<span class="hljs-string"><span class="hljs-string">"register"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">3</span></span>)<span class="hljs-comment"><span class="hljs-comment">#注册猫宁界面</span></span>Self.assertequal (self.check_text (<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_phone"</span></span>,<span class="hljs-string"><span class="hljs-string">"please Enter your mobile phone number"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-string"><span class="hljs-string">u "registration page-" Please enter mobile phone number "</span></span>) Self.assertequal (self.check_text (<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_verifycode"</span></span>,<span class="hljs-string"><span class="hljs-string">"please Enter the verification code"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-string"><span class="hljs-string">u "registration page-" Please enter the verification code "</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"get Verification code"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-string"><span class="hljs-string">u "registration page-" Get Verification Code "</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"sino-branch Love service agreement"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-string"><span class="hljs-string">u "registration page-" "sino-branch Love service agreement"</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"register"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-string"><span class="hljs-string">u "registration page-" Registration "</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">2</span></span>)<span class="hljs-comment"><span class="hljs-comment"># "sino-tech Service agreement"</span></span>D (text=<span class="hljs-string"><span class="hljs-string">"sino-branch Love service agreement"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">2</span></span>) Self.assertequal (self.check_ainb (<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/title"</span></span>,<span class="hljs-string"><span class="hljs-string">"service agreement"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-string"><span class="hljs-string">u "registration page-" service Agreement "</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/title_back"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>)<span class="hljs-comment"><span class="hljs-comment">#手机号不输入是否能注册</span></span>D (text=<span class="hljs-string"><span class="hljs-string">"register"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">3</span></span>)<span class="hljs-comment"><span class="hljs-comment"># Enter only 1 digits to register & enter only 1 digits to get verification code</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_phone"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"1"</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"get Verification code"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (text=<span class="hljs-string"><span class="hljs-string">"register"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_phone"</span></span>). Clear_text () Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>)<span class="hljs-comment"><span class="hljs-comment">#只输入5个数字是否能获取验证码</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_phone"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"11111"</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"get Verification code"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_phone"</span></span>). Clear_text () Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>)<span class="hljs-comment"><span class="hljs-comment">#只输入手机号是否能注册</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_phone"</span></span>). set_text (phone_number) self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"register"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (text=<span class="hljs-string"><span class="hljs-string">"register"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>)<span class="hljs-comment"><span class="hljs-comment">#输入正确的验证码 & Get Verification code is highlighted</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_verifycode"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"5648"</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"get Verification code"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">2</span></span>)<span class="hljs-comment"><span class="hljs-comment">#密码只输入1个数字是否能注册 & Register button is highlighted</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_pass"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"1"</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_passagain"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"1"</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"register"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-string"><span class="hljs-string">u "password only enter 1 digits can register"</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_pass"</span></span>). Clear_text () D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_passagain"</span></span>). Clear_text () Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>)<span class="hljs-comment"><span class="hljs-comment">#输入不相同的密码是否能注册</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_pass"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"123456"</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_passagain"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"12345"</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"register"</span></span>),<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-string"><span class="hljs-string">u "enter a different password to register"</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_pass"</span></span>). Clear_text () D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_passagain"</span></span>). Clear_text () Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>)<span class="hljs-comment"><span class="hljs-comment">#输入正确的密码是否能注册 & I have agreed whether to tick</span></span>D (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_pass"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"123456"</span></span>) d (resourceid=<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_passagain"</span></span>). Set_text (<span class="hljs-string"><span class="hljs-string">"123456"</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">1</span></span>) Self.assertequal (self.check_controls_click_resourceid (<span class="hljs-string"><span class="hljs-string">"com.isentech.attendancet:id/regis_agree"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>) Self.assertequal (self.check_controls_click_text (<span class="hljs-string"><span class="hljs-string">"register"</span></span>),<span class="hljs-number"><span class="hljs-number">1</span></span>) Time.sleep (<span class="hljs-number"><span class="hljs-number">2</span></span>) d (text=<span class="hljs-string"><span class="hljs-string">"register"</span></span>). Click () time.sleep (<span class="hljs-number"><span class="hljs-number">8</span></span>)<span class="hljs-keyword"><span class="hljs-keyword">except</span></span>Exception, E:<span class="hljs-keyword"><span class="hljs-keyword">Print</span></span> <span class="hljs-string"><span class="hljs-string">u "Error: Registration module has problem \ n"</span></span>E<span class="hljs-function"><span class="hljs-function"> <span class="hljs-keyword">def</span> <span class="hljs-title">test_app</span><span class="hljs-params">()</span>:</span></span>Test_unit = Unittest. TestSuite () test_unit.addtest (mytestsuite (<span class="hljs-string"><span class="hljs-string">"test_aregister"</span></span>))<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>__name__ = =<span class="hljs-string"><span class="hljs-string">"__main__"</span></span>:<span class="hljs-comment"><span class="hljs-comment"># Test App</span></span>Unittest.main ()</code></pre>Uiautomator For detailed usage please refer to this article: https://github.com/xiaocong/uiautomator<p><p>I just started to write a blog, if you do not understand the place can add my QQ to learn exchange: 1093689803<br>Or leave a message to ask</p></p> <p><p>Use Python for automated Android testing</p></p></span>
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.
A Free Trial That Lets You Build Big!
Start building with 50+ products and up to 12 months usage for Elastic Compute Service