Automatisieren Sie Windows-Anwendungstests mit Windows Application Driver-Python Edition

Bisherige Zusammenfassung

Ein Blick auf @ ootakens Automatisieren von Windows-Anwendungstests mit Windows-Anwendungstreiber schien ziemlich interessant zu sein, daher habe ich beschlossen, es auch mit Python zu versuchen. Es war. Das ist langweilig, also werde ich einen schlüsselwortgesteuerten Testfall mit Applum Library in RobotFramework versuchen. Ich habe es mir ausgedacht.

Was ist Robot Framework? Für diejenigen, die sagen, siehe Zuvor geschriebener Artikel. Im vorherigen Artikel (vor mehr als 2 Jahren) habe ich die Selenium2-Schlüsselwortbibliothek verwendet, aber dieses Mal werde ich die Bibliothek für Appium verwenden.

Vorbereitung

Laden Sie zunächst den Windows-Anwendungstreiber von der folgenden URL herunter und installieren Sie ihn. https://github.com/Microsoft/WinAppDriver/releases

Laden Sie auch die Python-Beispieldatei herunter.  https://github.com/Microsoft/WinAppDriver/blob/master/Samples/Python/calculatortest.py

Installieren Sie als Nächstes die entsprechenden Python-Bibliotheken. Wenn Sie robotframework-appiumlibrary installieren, können Sie den gesamten Satz eingeben.

> pip install robotframework-appiumlibrary

Die Bestätigungsumgebung ist übrigens Windows10 Home Version 1703 64-Bit-Version + Python 3.6.0. Die Version der Bibliothek lautet wie folgt.

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

#Führen Sie die Probe aus Ich werde versuchen, das ursprüngliche Python-Beispiel auszuführen.Automatisieren Sie Windows-Anwendungstests mit dem Windows-AnwendungstreiberWie beim Java-Beispiel in schlägt es in einer japanischen Umgebung fehl. Ändern Sie daher die Locator-Spezifikationsmethode und die Assert-Beurteilungsmethode. Ich habe assertIn verwendet, weil es in der Python-Unittest keine assertThat gibt. Beachten Sie, dass die Reihenfolge der Argumente umgekehrt ist.

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)

Starten Sie den Windows-Anwendungstreiber und führen Sie den Test aus.

>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

Ich habe alles bestanden.

#Versuchen Sie es mit einem schlüsselwortgesteuerten Test Als nächstes schreiben wir denselben Test und führen ihn mit Robot Framework aus. Sie können die in der Appium-Bibliothek angegebenen Schlüsselwörter unverändert verwenden. Klicken Sie hier, um Dokumente zu Schlüsselwörtern anzuzeigen, die verwendet werden können.  http://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html

Ich denke, Sie müssen nicht viel über jeden Testfall erklären. Zahlen${SPACE}Die Umgebung ist nicht so gut, aber ansonsten finde ich es sehr intuitiv zu schreiben. ~~Wenn Sie im Argument von Open Application of Test Setup nicht platformName angeben, tritt in Click Element ein Fehler auf, der angegeben wird. Gibt es einen Punkt zu beachten?~~

(2017/04/22 Korrektur) http://appium.io/slate/en/master/?python#create-test-project In Bezug auf die gewünschten Funktionen der Windows App Automation-Sitzung gab es die folgende Beschreibung, daher habe ich den Code geändert.

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

Ich folge jedoch nicht der offiziellen Probe. .. ..

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}

Lass es uns laufen. Alle sind 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

#Zusammenfassung *Installation von WIndows Application Driver- und Python Appium-bezogenen Bibliotheken *Ausführung des Python-Beispieltestfalls (geändert) auf der ursprünglichen Site *Schreiben Sie Beispieltestfälle mithilfe der Appium Library von Robot Framework neu und führen Sie sie in schlüsselwortgesteuerte Testfälle aus

Als Ergebnis des Versuchs stellte ich fest, dass der Windows-Anwendungstreiber die Testautomatisierung von Windows-Desktopanwendungen ziemlich einfach macht (z. B. eine einfache Tastenbedienung einer gut identifizierten App).

Nein, ich freue mich sehr auf die Zukunft des Windows-Anwendungstreibers!

Recommended Posts

Automatisieren Sie Windows-Anwendungstests mit Windows Application Driver-Python Edition
Automatisieren Sie Python-Tests mit CircleCI
Automatisieren Sie das Testen von Smartphone-Apps mit Appium-Python Edition
Automatisieren Sie das Testen von Facebook-Apps mit Facebook-Testbenutzern
Führen Sie (ältere) Windows-Apps mit dem Windows-Anwendungstreiber aus
Automatisieren Sie UI-Tests mit Selenium API | Crawlen von Websites mit Python
Python ab Windows 7
Testen von Elasticsearch mit Python-tcptest
Python mit VSCode (Windows 10)
Führen Sie Python mit PyCharm aus (Windows)
Venv Umgebung mit Windows Powershell
Entwicklung von Webanwendungen mit Flask
WebSocket-Anwendung mit Flask-Socket IO
Verwenden Sie Windows 10-Schriftarten mit WSL
Erstellen Sie eine Webanwendung mit Django
Probieren Sie lokale Tests mit Travis vor
Automatisieren Sie die Sushi-Herstellung mit Python
Testen von HTTP-Anforderungen mit ESP-WROOM-32
Zeitsynchronisation (Windows) mit Python
Bloggen mit Pelican unter Windows