Appium 求助:这样的脚本已经无法运行下去,不知为何

bling8090 · 2019年02月20日 · 最后由 bling8090 回复于 2019年05月06日 · 1960 次阅读

安卓手机:真机,安卓 8.0
appium 版本:1.4
框架:python+appium+unittest
问题描述:成功连接手机,开启 appium server 后,执行 testsuit.py 主程序时,不执行用例程序。
pycharm 控制台信息如下:
<_io.TextIOWrapper name='' mode='w' encoding='UTF-8'>
Time Elapsed: 0:00:00

appium 中无日志信息。

脚本如下:
测试用例文件 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包存放地址'
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)  # 打开app  127.0.0.1是环回(loopback)地址
        time.sleep(5)
        print("环境准备完成!")
        self.verificationErrors = "----------------------------------------!"

    def tearDown(self):
        self.drvier.quit()
        print("环境还原完成!")

    #   测试用例
    def login_in(self):
        time.sleep(5)
        try:
            title = self.driver.find_element_by_text("您好,请登录")
        except NoSuchElementException as e:
            list_care = self.driver.find_element_by_id('com.njzx.care:id/ll')
            list_care.click()
            time.sleep(2)
        else:
            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)

测试集(主程序)文件 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)
共收到 9 条回复 时间 点赞

login_in(self): 改成 test_login_in(self): 试试

测试用例函数前没有 test_,unittest 不会去执行

这样运行,APP 正常打开了吗?为什么你的 deviceName 还带端口,先按楼上的方法操作吧,用例名必须以 test 开头

皆非 回复

改了,但是没有像预期那样执行,看到 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]. (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]. (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:5037","appium:appPackage":"com.njzx.care","appium:appAct]

kilalonger 回复

error: Unhandled error: TypeError: undefined is not a function 这种有没有比较好解决方法啊

洛凉 回复

error: Unhandled error: TypeError: undefined is not a function 有报错,但是这种报错有可能是 appium 自身问题,不知道兄弟有没有好的解决方法啊。至于端口号这个无影响的

bling8090 回复

android 7.0 以上没试过,好久没告 appium 了,我在网上看到关于 appium 和 android7.0 兼容的问题,你可以试试。
为啥不试试直接使用 atx 呢?

https://blog.csdn.net/qq_38065133/article/details/82724992

bling8090 回复

这个报错,我还真没遇到过。暂没有好的思路。

皆非 回复

atx 是可以,appium 这个阶段想去学习一下的

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册