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