-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalc.py
executable file
·146 lines (128 loc) · 5.74 KB
/
calc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- coding: utf-8 -*-
import os
from time import sleep
import unittest
from appium import webdriver
from nose.tools import assert_equal, assert_not_equal
from nose_parameterized import parameterized
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
class TestCalc(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.0.2'
# desired_caps['deviceName'] = '73ffacfe'
desired_caps['deviceName'] = 'emulator-5554'
desired_caps['app'] = PATH('calc.apk')
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
self.driver.orientation = 'PORTRAIT'
self.arg1 = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("arg1")')
self.arg2 = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("arg2")')
self.add = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("addition")')
self.sub = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("subtraction")')
self.div = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("division")')
self.mul = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("multiplication")')
self.res = self.driver.find_element_by_android_uiautomator('new UiSelector().descriptionContains("result")')
@parameterized.expand([
('positive', '1', '2'),
('negative', '-3', '-4'),
('fraction', '5.6', '7.8'),
('long number', '11111111111111111111', '11111111111111111111'),
])
def test_1_arguments_check(self, msg, argument1, argument2):
assert_equal(self.arg1.get_attribute('text'), 'First argument')
assert_equal(self.arg2.get_attribute('text'), 'Second argument')
self.arg1.send_keys(argument1)
self.arg2.send_keys(argument2)
sleep(2)
assert_equal(self.arg1.get_attribute('text'), argument1, msg)
assert_equal(self.arg2.get_attribute('text'), argument2, msg)
assert_equal(self.res.get_attribute('text'), 'Result', msg) \
\
@parameterized.expand([
('chars', 'a', 'B'),
('symbol', '#', '$'),
# ('symbol cyr', 'Ж', 'й'),
])
def test_1a_arguments_negativ(self, msg, argument1, argument2):
self.arg1.send_keys(argument1)
self.arg2.send_keys(argument2)
# sleep(2)
assert_equal(self.arg1.get_attribute('text'), 'First argument')
assert_equal(self.arg2.get_attribute('text'), 'Second argument')
@parameterized.expand([
('num num sub', '1', '1', 'sub', '0'),
('nul num sub', '', '1', 'sub', '-1'),
('num nul sub', '1', '', 'sub', '1'),
('nul nul sub', '', '', 'sub', 'Result'),
])
def test_2_sub_operations(self, _, argument1, argument2, operation, result):
self.arg1.send_keys(argument1)
self.arg2.send_keys(argument2)
self.sub.click()
assert_equal(self.res.get_attribute('text'), result)
@parameterized.expand([
('num num div', '1', '1', 'div', '1'),
('nul num div', '', '1', 'div', 'Error'),
('num nul div', '1', '', 'div', 'Error'),
('nul nul div', '', '', 'div', 'Error'),
('num 0 div', '1', '0', 'div', 'Error'),
])
def test_3_div_operations(self, _, argument1, argument2, operation, result):
self.arg1.send_keys(argument1)
self.arg2.send_keys(argument2)
self.div.click()
assert_equal(self.res.get_attribute('text'), result)
@parameterized.expand([
('positive result', 9, 2, '7'),
('negative result', 4, 7, '-3'),
('fraction result', '9.9', 3, '6.9'),
('subtract nill', 76, 0, '76'),
('subtract from nill', 0, 999, '-999'),
('sub from negativ number', -12, 4, '-16'),
('subtract negative number', 12, -4, '16'),
])
def test_4_subtraction(self, _, argument1, argument2, result):
self.arg1.send_keys(argument1)
self.arg2.send_keys(argument2)
self.sub.click()
assert_equal(self.res.get_attribute('text'), result)
@parameterized.expand([
('positive', 8, 4, '2'),
('2 digits', 33, 3, '11'),
('3 digits', 333, 3, '111'),
('fraction result', 9, 6, '1.5'),
('fraction argument1', '9.9', 3, '3.3'),
('negative argument1', -10, 2, '-5'),
('20 dig numbers', '11111111111111111111', 1, '11111111111111111111'),
])
def test_5_division(self, _, argument1, argument2, result):
self.arg1.send_keys(argument1)
self.arg2.send_keys(argument2)
self.div.click()
assert_equal(self.res.get_attribute('text'), result)
def test_6_rotation(self):
self.driver.orientation = 'PORTRAIT'
self.arg1.send_keys(1)
self.arg2.send_keys(2)
self.add.click()
self.driver.orientation = 'LANDSCAPE'
sleep(2)
assert_equal(self.arg1.get_attribute('text'), '1')
assert_equal(self.arg2.get_attribute('text'), '2')
assert_equal(self.res.get_attribute('text'), '3')
self.arg1.send_keys(1)
self.arg2.send_keys(2)
self.add.click()
self.driver.orientation = 'LANDSCAPE'
sleep(2)
assert_equal(self.arg1.get_attribute('text'), '1')
assert_equal(self.arg2.get_attribute('text'), '2')
assert_equal(self.res.get_attribute('text'), '3')
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestCalc)
unittest.TextTestRunner(verbosity=2).run(suite)