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.
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