Automatisez les tests d'applications Windows avec Windows Application Driver-Python Edition

Synopsis jusqu'à présent

En regardant [Automatiser les tests d'application Windows avec le pilote d'application Windows] de @ ootaken (http://qiita.com/ootaken/items/33099fcbd730e775e4db), cela m'a semblé assez intéressant, j'ai donc décidé de l'essayer également avec Python. C'était. C'est ennuyeux, je vais donc essayer un cas de test basé sur des mots clés en utilisant Applum Library dans RobotFramework. Je l'ai inventé.

Qu'est-ce que Robot Framework? Pour ceux qui le disent, veuillez vous référer aux articles que j'ai écrits plus tôt. Dans l'article précédent (il y a plus de 2 ans), j'ai utilisé la bibliothèque de mots clés Selenium2, mais cette fois j'utiliserai la bibliothèque pour Appium.

Préparation

Tout d'abord, téléchargez et installez le pilote d'application Windows à partir de l'URL suivante. https://github.com/Microsoft/WinAppDriver/releases

Téléchargez également l'exemple de fichier Python.  https://github.com/Microsoft/WinAppDriver/blob/master/Samples/Python/calculatortest.py

Ensuite, installez les bibliothèques Python appropriées. Si vous installez robotframework-appiumlibrary, vous pouvez entrer l'ensemble complet.

> pip install robotframework-appiumlibrary

À propos, l'environnement de confirmation est Windows10 Home Version 1703 version 64 bits + Python 3.6.0. La version de la bibliothèque est la suivante.

>pip freeze                   
apipkg==1.4                                         
Appium-Python-Client==0.24                          
colorama==0.3.7                                     
coverage==4.3.4                                     
decorator==4.0.11                                   
docutils==0.13.1                                    
execnet==1.4.1                                      
mock==1.0.1                                         
py==1.4.33                                          
pytest==3.0.7                                       
pytest-cov==2.4.0                                   
pytest-pythonpath==0.7.1                            
pytest-xdist==1.15.0                                
robotframework==3.0.2                               
robotframework-appiumlibrary==1.4.3                 
sauceclient==0.2.1                                  
selenium==3.3.3                                     ```

#Exécutez l'exemple J'essaierai d'exécuter l'exemple Python original,Automatisez les tests d'application Windows avec le pilote d'application WindowsComme avec l'exemple Java dans, il échouera dans un environnement japonais, changez donc la méthode de spécification Locator et la méthode de jugement Assert. J'ai utilisé assertIn car il n'y a pas d'assertThat dans le python unittest. Notez que l'ordre des arguments est inversé.

calculator.py


"""
//******************************************************************************
//
// Copyright (c) 2016 Microsoft Corporation. All rights reserved.
//
// This code is licensed under the MIT License (MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
//******************************************************************************
"""

import unittest
from appium import webdriver

class SimpleCalculatorTests(unittest.TestCase):

	def setUp(self):
		#set up appium
		desired_caps = {}
		desired_caps["app"] = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
		self.driver = webdriver.Remote(
			command_executor='http://127.0.0.1:4723',
			desired_capabilities= desired_caps)

	def tearDown(self):
		self.driver.quit()

	def test_initialize(self):
		self.driver.find_element_by_accessibility_id("clearButton").click()
		self.driver.find_element_by_accessibility_id("num7Button").click()

		result = self.driver.find_element_by_accessibility_id("CalculatorResults")
		self.assertIn(" 7 ", str(result.text))

	def test_addition(self):
		self.driver.find_element_by_accessibility_id("num1Button").click()
		self.driver.find_element_by_accessibility_id("plusButton").click()
		self.driver.find_element_by_accessibility_id("num7Button").click()
		self.driver.find_element_by_accessibility_id("equalButton").click()

		result = self.driver.find_element_by_accessibility_id("CalculatorResults")
		self.assertIn( " 8 ", str(result.text))

	def test_combination(self):
		self.driver.find_element_by_accessibility_id("num7Button").click()
		self.driver.find_element_by_accessibility_id("multiplyButton").click()
		self.driver.find_element_by_accessibility_id("num9Button").click()
		self.driver.find_element_by_accessibility_id("plusButton").click()
		self.driver.find_element_by_accessibility_id("num1Button").click()
		self.driver.find_element_by_accessibility_id("equalButton").click()
		self.driver.find_element_by_accessibility_id("divideButton").click()
		self.driver.find_element_by_accessibility_id("num8Button").click()
		self.driver.find_element_by_accessibility_id("equalButton").click()

		result = self.driver.find_element_by_accessibility_id("CalculatorResults")
		self.assertIn( " 8 ", str(result.text))

	def test_division(self):
		self.driver.find_element_by_accessibility_id("num8Button").click()
		self.driver.find_element_by_accessibility_id("num8Button").click()
		self.driver.find_element_by_accessibility_id("divideButton").click()
		self.driver.find_element_by_accessibility_id("num1Button").click()
		self.driver.find_element_by_accessibility_id("num1Button").click()
		self.driver.find_element_by_accessibility_id("equalButton").click()
		
		result = self.driver.find_element_by_accessibility_id("CalculatorResults")
		self.assertIn( " 8 ", str(result.text))

	def test_multiplication(self):
		self.driver.find_element_by_accessibility_id("num9Button").click()
		self.driver.find_element_by_accessibility_id("multiplyButton").click()
		self.driver.find_element_by_accessibility_id("num9Button").click()
		self.driver.find_element_by_accessibility_id("equalButton").click()

		result = self.driver.find_element_by_accessibility_id("CalculatorResults")
		self.assertIn( " 81 ", str(result.text))

	def test_subtraction(self):
		self.driver.find_element_by_accessibility_id("num9Button").click()
		self.driver.find_element_by_accessibility_id("minusButton").click()
		self.driver.find_element_by_accessibility_id("num1Button").click()
		self.driver.find_element_by_accessibility_id("equalButton").click()

		result = self.driver.find_element_by_accessibility_id("CalculatorResults")
		self.assertIn( " 8 ", str(result.text))



if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(SimpleCalculatorTests)
    unittest.TextTestRunner(verbosity=2).run(suite)

Démarrez le pilote d'application Windows, puis essayez d'exécuter le test.

>python calculatortest.py
test_addition (__main__.SimpleCalculatorTests) ... ok
test_combination (__main__.SimpleCalculatorTests) ... ok
test_division (__main__.SimpleCalculatorTests) ... ok
test_initialize (__main__.SimpleCalculatorTests) ... ok
test_multiplication (__main__.SimpleCalculatorTests) ... ok
test_subtraction (__main__.SimpleCalculatorTests) ... ok

----------------------------------------------------------------------
Ran 6 tests in 11.818s

OK

J'ai tout passé.

#Essayez le test basé sur les mots clés Ensuite, écrivons et exécutons le même test avec Robot Framework. Vous pouvez utiliser les mots-clés fournis dans la bibliothèque Appium tels quels. Cliquez ici pour consulter les documents sur les mots-clés pouvant être utilisés.  http://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html

Je pense que vous n'avez pas besoin d'expliquer beaucoup sur chaque cas de test. Nombres${SPACE}Je ne pense pas que ce soit entouré, mais à part ça, je pense que c'est très intuitif à écrire. ~~Si vous ne spécifiez pas platformName dans l'argument de Open Application of Test Setup, une erreur se produira dans Click Element, donc il est spécifié. Y a-t-il un point à noter?~~

(2017/04/22 correction) http://appium.io/slate/en/master/?python#create-test-project En ce qui concerne les capacités souhaitées de Windows App Automation Session, il y avait la description suivante, j'ai donc modifié le code.

STARTING A SESSION

Note that you should additionally use these capabilities to ensure you are getting a Windows App automation session:

platformName: Windows deviceName: WindowsPC

Je ne suis cependant pas l'échantillon officiel. .. ..

calculator.robot


*** Settings ***
Library  AppiumLibrary
Test Setup  Open Application  http://127.0.0.1:4723  app=Microsoft.WindowsCalculator_8wekyb3d8bbwe!App  platformName=Windows  deviceName=WindocwPC
Test Teardown  Close Application

*** Test Cases ***
Test Initialization
    Click Element  accessibility_id=clearButton
    Click Element  accessibility_id=num7Button
    Element Should Contain Text  accessibility_id=CalculatorResults  ${SPACE}7${SPACE}

Test Addition
    Click Element  accessibility_id=num1Button
    Click Element  accessibility_id=plusButton
    Click Element  accessibility_id=num7Button
    Click Element  accessibility_id=equalButton
    Element Should Contain Text  accessibility_id=CalculatorResults  ${SPACE}8${SPACE}

Test Combination
    Click Element  accessibility_id=num7Button
    Click Element  accessibility_id=multiplyButton
    Click Element  accessibility_id=num9Button
    Click Element  accessibility_id=plusButton
    Click Element  accessibility_id=num1Button
    Click Element  accessibility_id=equalButton
    Click Element  accessibility_id=divideButton
    Click Element  accessibility_id=num8Button
    Click Element  accessibility_id=equalButton
    Element Should Contain Text  accessibility_id=CalculatorResults  ${SPACE}8${SPACE}

Test Division
    Click Element  accessibility_id=num8Button
    Click Element  accessibility_id=num8Button
    Click Element  accessibility_id=divideButton
    Click Element  accessibility_id=num1Button
    Click Element  accessibility_id=num1Button
    Click Element  accessibility_id=equalButton
    Element Should Contain Text  accessibility_id=CalculatorResults  ${SPACE}8${SPACE}

Test Multiplication
    Click Element  accessibility_id=num9Button
    Click Element  accessibility_id=multiplyButton
    Click Element  accessibility_id=num9Button
    Click Element  accessibility_id=equalButton
    Element Should Contain Text  accessibility_id=CalculatorResults  ${SPACE}81${SPACE}

Test Substraction
    Click Element  accessibility_id=num9Button
    Click Element  accessibility_id=minusButton
    Click Element  accessibility_id=num1Button
    Click Element  accessibility_id=equalButton
    Element Should Contain Text  accessibility_id=CalculatorResults  ${SPACE}8${SPACE}

Lançons-le. Tous sont Pass.

>robot -d result calculatortest.robot
==============================================================================
Calculatortest
==============================================================================
 Test Initialization                                                   | PASS |
------------------------------------------------------------------------------
 Test Addition                                                         | PASS |
------------------------------------------------------------------------------
 Test Combination                                                      | PASS |
------------------------------------------------------------------------------
 Test Division                                                         | PASS |
------------------------------------------------------------------------------
 Test Multiplication                                                   | PASS |
------------------------------------------------------------------------------
 Test Substraction                                                     | PASS |
------------------------------------------------------------------------------
 Calculatortest                                                        | PASS |
6 critical tests, 6 passed, 0 failed
6 tests total, 6 passed, 0 failed
==============================================================================
Output:  D:\Dev\rf_home\result\output.xml
Log:     D:\Dev\rf_home\result\log.html
Report:  D:\Dev\rf_home\result\report.html

#Résumé *Installation du pilote d'application WIndows et des bibliothèques liées à Python Appium *Exécution de l'exemple de test Python (modifié) sur le site d'origine *Réécrire et exécuter des exemples de cas de test dans des cas de test basés sur des mots clés à l'aide de la bibliothèque Appium de Robot Framework

Après avoir essayé, j'ai trouvé que le pilote d'application Windows rend l'automatisation des tests des applications de bureau Windows assez facile (par exemple, une simple opération de bouton d'une application bien identifiée).

Non, j'attends vraiment avec impatience l'avenir du pilote d'application Windows!

Recommended Posts

Automatisez les tests d'applications Windows avec Windows Application Driver-Python Edition
Automatisez les tests python avec CircleCI
Automatisez les tests d'applications pour smartphone avec Appium-Python Edition
Automatisez les tests d'applications Facebook avec les utilisateurs de test Facebook
Exécutez des applications Windows (héritées) avec le pilote d'application Windows
Automatisez les tests d'interface utilisateur avec l'API Selenium | Exploration de sites Web avec python
Python à partir de Windows 7
Tester Elasticsearch avec python-tcptest
Python avec VSCode (Windows 10)
Exécutez python avec PyCharm (Windows)
Environnement Venv avec Windows PowerShell
Développement d'applications Web avec Flask
Application WebSocket avec Flask-Socket IO
Utiliser les polices Windows 10 avec WSL
Créer une application Web avec Django
Pré-essayez les tests locaux avec Travis
Automatisez la fabrication des sushis avec Python
Test des requêtes HTTP avec ESP-WROOM-32
Synchronisation de l'heure (Windows) avec Python
Bloguer avec Pelican sur Windows