File indexing completed on 2023-05-30 12:24:36
0001 #!/usr/bin/env python3 0002 0003 # SPDX-License-Identifier: MIT 0004 # SPDX-FileCopyrightText: 2016 Microsoft Corporation. All rights reserved. 0005 # SPDX-FileCopyrightText: 2021-2022 Harald Sitter <sitter@kde.org> 0006 0007 import unittest 0008 from appium import webdriver 0009 from appium.webdriver.common.appiumby import AppiumBy 0010 import selenium.common.exceptions 0011 from selenium.webdriver.support.ui import WebDriverWait 0012 0013 class SimpleCalculatorTests(unittest.TestCase): 0014 @classmethod 0015 def setUpClass(self): 0016 desired_caps = {} 0017 # The app capability may be a command line or a desktop file id. 0018 desired_caps["app"] = "org.kde.kcalc.desktop" 0019 # Boilerplate, always the same 0020 self.driver = webdriver.Remote( 0021 command_executor='http://127.0.0.1:4723', 0022 desired_capabilities=desired_caps) 0023 # Set a timeout for waiting to find elements. If elements cannot be found 0024 # in time we'll get a test failure. This should be somewhat long so as to 0025 # not fall over when the system is under load, but also not too long that 0026 # the test takes forever. 0027 self.driver.implicitly_wait = 10 0028 0029 @classmethod 0030 def tearDownClass(self): 0031 # Make sure to terminate the driver again, lest it dangles. 0032 self.driver.quit() 0033 0034 def setUp(self): 0035 self.driver.find_element(by=AppiumBy.NAME, value="AC").click() 0036 wait = WebDriverWait(self.driver, 20) 0037 wait.until(lambda x: self.getresults() == '0') 0038 0039 def getresults(self): 0040 displaytext = self.driver.find_element(by='description', value='Result Display').text 0041 return displaytext 0042 0043 def assertResult(self, actual, expected): 0044 wait = WebDriverWait(self.driver, 20) 0045 try: 0046 wait.until(lambda x: self.getresults() == expected) 0047 except selenium.common.exceptions.TimeoutException: 0048 pass 0049 self.assertEqual(self.getresults(), expected) 0050 0051 def test_initialize(self): 0052 self.driver.find_element(by=AppiumBy.NAME, value="AC").click() 0053 self.driver.find_element(by=AppiumBy.NAME, value="7").click() 0054 self.assertResult(self.getresults(), "7") 0055 0056 def test_addition(self): 0057 self.driver.find_element(by=AppiumBy.NAME, value="1").click() 0058 self.driver.find_element(by=AppiumBy.NAME, value="+").click() 0059 self.driver.find_element(by=AppiumBy.NAME, value="7").click() 0060 self.driver.find_element(by=AppiumBy.NAME, value="=").click() 0061 self.assertResult(self.getresults(), "8") 0062 0063 def test_combination(self): 0064 self.driver.find_element(by=AppiumBy.NAME, value="7").click() 0065 self.driver.find_element(by=AppiumBy.NAME, value="×").click() 0066 self.driver.find_element(by=AppiumBy.NAME, value="9").click() 0067 self.driver.find_element(by=AppiumBy.NAME, value="+").click() 0068 self.driver.find_element(by=AppiumBy.NAME, value="1").click() 0069 self.driver.find_element(by=AppiumBy.NAME, value="=").click() 0070 self.driver.find_element(by=AppiumBy.NAME, value="÷").click() 0071 self.driver.find_element(by=AppiumBy.NAME, value="8").click() 0072 self.driver.find_element(by=AppiumBy.NAME, value="=").click() 0073 self.assertResult(self.getresults(),"8") 0074 0075 def test_division(self): 0076 # Using find element by name twice risks the driver finding the 0077 # result display text rather than finding the button. To avoid 0078 # that, execute the call once and store that as a local value. 0079 button8 = self.driver.find_element(by=AppiumBy.NAME, value="8") 0080 button8.click() 0081 button8.click() 0082 self.driver.find_element(by=AppiumBy.NAME, value="÷").click() 0083 button1 = self.driver.find_element(by=AppiumBy.NAME, value="1") 0084 button1.click() 0085 button1.click() 0086 self.driver.find_element(by=AppiumBy.NAME, value="=").click() 0087 self.assertResult(self.getresults(), "8") 0088 0089 def test_multiplication(self): 0090 self.driver.find_element(by=AppiumBy.NAME, value="9").click() 0091 self.driver.find_element(by=AppiumBy.NAME, value="×").click() 0092 self.driver.find_element(by=AppiumBy.NAME, value="9").click() 0093 self.driver.find_element(by=AppiumBy.NAME, value="=").click() 0094 self.assertResult(self.getresults(), "81") 0095 0096 def test_subtraction(self): 0097 self.driver.find_element(by=AppiumBy.NAME, value="9").click() 0098 self.driver.find_element(by=AppiumBy.NAME, value="−").click() 0099 self.driver.find_element(by=AppiumBy.NAME, value="1").click() 0100 self.driver.find_element(by=AppiumBy.NAME, value="=").click() 0101 self.assertResult(self.getresults(), "8") 0102 0103 if __name__ == '__main__': 0104 unittest.main()