框架:appium+python+unittest
安卓手机:真机,安卓8.0
appium版本:1.4
问题描述:成功连接手机,开启appium server后,执行testsuit.py主程序时,不执行用例程序,appium控制台有报错信息(函数未定义)。
pycharm控制台信息如下:
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
E test_login_in (loginIn_testcase.Test_Login)
Time Elapsed: 0:10:00.024448
appium控制台有报错信息:
> info: Starting App
> info: [debug] Attempting to kill all 'uiautomator' processes
> info: [debug] Getting all processes with 'uiautomator'
> error: Unhandled error: TypeError: undefined is not a function
> at [object Object].ADB.getPIDsByName (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:1037:8)
> at [object Object].ADB.killProcessesByName (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:1079:8)
> at [object Object].UiAutomator.start (D:\Appium\loadspace\Appium\node_modules\appium\lib\devices\android\uiautomator.js:29:12)
> at [object Object].<anonymous> (D:\Appium\loadspace\Appium\node_modules\appium\lib\devices\android\android.js:115:37)
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:607:21
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:246:17
> at iterate (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:146:13)
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:157:25
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:248:21
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:612:34
> at [object Object].androidCommon.initUnicode (D:\Appium\loadspace\Appium\node_modules\appium\lib\devices\android\android-common.js:878:5)
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:607:21
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:246:17
> at iterate (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:146:13)
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:157:25
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:248:21
> at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:612:34
> at [object Object].<anonymous> (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:180:9)
> at ChildProcess.exithandler (child_process.js:742:7)
> at ChildProcess.emit (events.js:110:17)
> at maybeClose (child_process.js:1016:16)
> at Process.ChildProcess._handle.onexit (child_process.js:1088:5) context: [POST /wd/hub/session {"capabilities":{"firstMatch":[{}],"alwaysMatch":{"platformName":"Android","appium:platformVersion":"5.0","appium:deviceName":"NPE4C17302001740","appium:appPackage":"com.njzx.care","appium:appActivity]
testreport中错误为:
Traceback (most recent call last):
File "E:\pycharm\run\SHB_Test\loginIn_testcase.py", line 32, in setUp
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 打开app 127.0.0.1是环回(loopback)地址
File "D:\python\lib\site-packages\appium\webdriver\webdriver.py", line 97, in __init__
super(WebDriver, self).__init__(command_executor, desired_capabilities, browser_profile, proxy, keep_alive)
File "D:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "D:\python\lib\site-packages\appium\webdriver\webdriver.py", line 136, in start_session
response = self.execute(RemoteCommand.NEW_SESSION, parameters)
File "D:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "D:\python\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 376, in execute
return self._request(command_info[0], url, body=data)
File "D:\python\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 404, in _request
resp = http.request(method, url, body=body, headers=headers)
File "D:\python\lib\site-packages\urllib3\request.py", line 72, in request
**urlopen_kw)
File "D:\python\lib\site-packages\urllib3\request.py", line 150, in request_encode_body
return self.urlopen(method, url, **extra_kw)
File "D:\python\lib\site-packages\urllib3\poolmanager.py", line 323, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "D:\python\lib\site-packages\urllib3\connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "D:\python\lib\site-packages\urllib3\util\retry.py", line 367, in increment
raise six.reraise(type(error), error, _stacktrace)
File "D:\python\lib\site-packages\urllib3\packages\six.py", line 685, in reraise
raise value.with_traceback(tb)
File "D:\python\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "D:\python\lib\site-packages\urllib3\connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "D:\python\lib\site-packages\urllib3\connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "D:\python\lib\http\client.py", line 1331, in getresponse
response.begin()
File "D:\python\lib\http\client.py", line 297, in begin
version, status, reason = self._read_status()
File "D:\python\lib\http\client.py", line 266, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
脚本如下:
测试用例文件loginIn_testcase.py
# -*- coding:utf-8 -*-
import unittest
import os
import time
from appium import webdriver # 导入appium库
from selenium.common.exceptions import NoSuchElementException
# 测试用例1:
# 安卓应用名:守护宝
# 包名和activity名:com.njzx.care/com.njzx.care.activity.WelcomeActivity2
# 测试步骤:
# (1)打开apk
# (2)关爱界面点击“您好,请登录”,界面跳转至登录/注册界面
# (3)直接输入号码:15152660926 密码:111111
# (4)点击登录---成功
class Test_Login(unittest.TestCase):
def setUp(self):
# 准备环境
# PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p)) # 不写这一句也OK
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.0'
desired_caps['deviceName'] = 'NPE4C17302001740:5037'
# desired_caps['app'] = PATH('D:/workspace/testUI_new/app/test.apk')
desired_caps['appPackage'] = 'com.njzx.care'
desired_caps['appActivity'] = 'com.njzx.care.activity.WelcomeActivity2'
# desired_caps["unicodeKeyboard", "True"] # 支持中文输入
# desired_caps["resetKeyboard", "True"] # 支持中文输入,必须两条都配置
desired_caps['newCommandTimeout'] = '100' # 超时时间
desired_caps['automationName'] = 'uiautomator2'
# desired_caps['app'] = 'apk包存放地址'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 打开app 127.0.0.1是环回(loopback)地址
time.sleep(5)
self.driver = driver
print("环境准备完成!")
self.verificationErrors = "----------------------------------------!"
# 测试用例
def test_login_in(self): # 用例名必须以test_开头
time.sleep(5)
title = self.driver.find_element_by_text("您好,请登录")
title.click()
time.sleep(2)
user = self.driver.find_element_by_text("请输入手机号码")
if user.exists():
user.click()
time.sleep(2)
user_tel = input("请输入手机账号")
user.send_keys(user_tel)
else:
print('user元素未获取得到')
pwd = self.driver.find_element_by_text("请输入登录密码")
if pwd.exists():
pwd.click()
time.sleep(2)
pwd_tel = input("请输入密码")
pwd.send_keys(pwd_tel)
else:
print('pwd元素未获取得到')
# 点击登录
try:
submit_login = self.driver.find_element_by_id("com.njzx.care:id/iv_login")
except (NoSuchElementException,Exception) as d:
print("登录失败!", format(d))
else:
submit_login.click()
time.sleep(2)
def tearDown(self):
self.drvier.quit()
print("环境还原完成!")
测试集(主程序)文件testsuit.py:
# encoding:utf-8
import unittest
from loginIn_testcase import Test_Login
from HTMLTestRunner import HTMLTestRunner
# 用例集合
if __name__ == '__main__':
suite = unittest.TestSuite() # unittest模块中的TestSuite()创建一个对象接收testcase
suite.addTests(unittest.TestLoader().loadTestsFromNames(['loginIn_testcase.Test_Login']))# 传入测试用例(文件名 + 类名)
with open('E:/pycharm/run/SHB_Test/result_report/HTMLReport.html', 'wb') as f:# 模式wb
runner = HTMLTestRunner(stream=f,
title=' Test Report',
description='generated by HTMLTestRunner----Bling',
verbosity=2
)
runner.run(suite)
Appium自动化测试
本文介绍了一个使用Appium、Python和unittest框架进行自动化测试的案例,针对安卓应用的测试过程中遇到的问题进行了详细描述,包括测试环境的搭建、测试脚本的编写、运行中出现的错误及其可能的原因。
5372

被折叠的 条评论
为什么被折叠?



