所用设备:
手机:oppo R7sm
软件:手机自带计算器
appium —服务器,客户端
ui automator view —获取APP控件
脚本语言:python
报错1:
C:\Users\AppData\Local\Programs\Python\Python36\python.exe F:/wechat/src/test_case/test_calautor.py
C:\Users\jinyifeng\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=556, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63828), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
C:\Users\jinyifeng\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=536, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63886), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
EC:\Users\jinyifeng\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=120, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63887), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
EC:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=804, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63888), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
EC:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=556, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63889), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
EC:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=820, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63890), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
EC:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=648, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63891), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=108, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63892), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=644, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63893), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
EC:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed <socket.socket fd=820, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 63894), raddr=(‘127.0.0.1’, 4723)>
return self._request(command_info[0], url, body=data)
这个错可以在脚本中设置忽略:
import warnings
warnings.simplefilter("ignore", ResourceWarning)
报错2:
File “F:/wechat/src/test_case/test_calautor.py”, line 46, in test_1_Div
result1 = self.dr.find_element_by_id(‘result’).text
File “C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 360, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File “C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\appium\webdriver\webdriver.py”, line 213, in find_element
‘value’: value})[‘value’]
File “C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 321, in execute
self.error_handler.check_response(response)
File “C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\appium\webdriver\errorhandler.py”, line 29, in check_response
raise wde
File “C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\appium\webdriver\errorhandler.py”, line 24, in check_response
super(MobileErrorHandler, self).check_response(response)
File “C:\Users\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py”, line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.
分析:
是result元素没找到,通过ui automator view查看result的id是否与脚本中的一样
result1 = self.dr.find_element_by_id('com.android.calculator2:id/edittext').text
修改脚本后执行就不报错了
报错2:
判断用例成功或失败的断言assert报错,
assert知识点学习
https://blog.csdn.net/qq_39247153/article/details/81082313
由于result1的值为963÷321\n=3而不是3,所以报错,所以修改脚本如下
self.assertEqual(result1, '963÷321\n=3')
重新执行即可
脚本:
from appium import webdriver
from time import sleep
import unittest
from appium.webdriver.common.touch_action import TouchAction
import warnings
class TestItest(unittest.TestCase):
@classmethod
def setUpClass(self):
warnings.simplefilter("ignore", ResourceWarning)
self.desired_caps = {'platformName': 'Android',
# 设备名
'deviceName': 'c534a77c',
# 设备的平台版本,是安卓5.1
'platformVersion': '5.1.1',
# app 包名
'appPackage': 'com.android.calculator2',
# app包名+app activity
'appActivity': '.Calculator',
# 使用unicode输入法
'unicodeKeyboard': "True",
# 重置输入法到初始状态
'resetKeyboard': "True",
# 启动app时不要清除app里的原有的数据
'noReset': "True"
}
self.dr=webdriver.Remote('http://127.0.0.1:4723/wd/hub',self.desired_caps)
sleep(5)
@classmethod
def tearDownClass(self):
sleep(2)
self.dr.close_app()
def test_1_Div(self):
# 除法运算963/321=3
# 计算器归0
self.dr.find_element_by_id('com.android.calculator2:id/cancel').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit9').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit6').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit3').click()
self.dr.find_element_by_id('com.android.calculator2:id/div').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit3').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit2').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit1').click()
self.dr.find_element_by_id('com.android.calculator2:id/equal').click()
result1 = self.dr.find_element_by_id('com.android.calculator2:id/edittext').text
self.assertEqual(result1, '963÷321\n=3')
self.dr.find_element_by_id('com.android.calculator2:id/cancel').click()
sleep(2)
def test_2_Div(self):
# 除法运算963/0
self.dr.find_element_by_id('com.android.calculator2:id/digit9').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit6').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit3').click()
self.dr.find_element_by_id('com.android.calculator2:id/div').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit0').click()
self.dr.find_element_by_id('com.android.calculator2:id/equal').click()
result1 = self.dr.find_element_by_id('com.android.calculator2:id/edittext').text
self.assertEqual(result1,'963÷0\n=∞')
sleep(1)
action1 = TouchAction(self.dr)
e1 = self.dr.find_element_by_id('com.android.calculator2:id/del')
action1.long_press(e1).wait(4000).perform()
result1 = self.dr.find_element_by_id('com.android.calculator2:id/edittext').text
self.assertEqual(result1, '')
sleep(2)
def test_3_Multi(self):
# 乘法运算258* 0.5=129
self.dr.find_element_by_id('com.android.calculator2:id/digit2').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit5').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit8').click()
self.dr.find_element_by_id('com.android.calculator2:id/mul').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit0').click()
self.dr.find_element_by_id('com.android.calculator2:id/dot').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit5').click()
self.dr.find_element_by_id('com.android.calculator2:id/equal').click()
result1 = self.dr.find_element_by_id('com.android.calculator2:id/edittext').text
self.assertEqual(result1,'258×0.5\n=129')
self.dr.find_element_by_id('com.android.calculator2:id/cancel').click()
sleep(2)
def test_4_plus(self):
# 加法运算147 + 3=150
self.dr.find_element_by_id('com.android.calculator2:id/digit1').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit4').click()
self.dr.find_element_by_id('com.android.calculator2:id/digit7').click()
self.