File indexing completed on 2023-09-24 09:47:49

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()