Appium自动化测试<四>补充

一、获取app应用版本信息以及手机id

import os


def exec_cmd(cmd) -> str:
    result = os.popen(cmd).read()
    print(result)
    return result

def get_all_devices() -> list:
    result = exec_cmd('adb devices')
    result = result.strip().split(" ")[3].replace("\n", '').replace("\t", ''). \
        replace("attached", '').split('device')
    print('1====',result)
    result.remove('')
    print('2====', result)
    if len(result) == 0:
        raise Exception("电脑未连接设备信息,无法进行正常测试。。")

    return result

def get_devices_version(device: str) -> str:
    if not isinstance(device, str):
        raise Exception("device type is should str..")
    result = exec_cmd("adb -s {} shell getprop ro.build.version.release".format(device))
    result = result.strip()
    if "error" not in result:
        return result
    else:
        raise Exception("获取设备系统版本失败,无法进行正常测试。。")

def get_device_infos():
    device_infos = []
    devices = get_all_devices()
    for i in range(len(devices)):
        device_dict = {"platform_version": get_devices_version(devices[i]), "server_port": 4723 + i * 2,
                       "system_port": 8200 + i * 1, "device": devices[i]}
        device_infos.append(device_dict)

    if len(device_infos) < 1:
        raise Exception("当前电脑未连接设备信息。。。")
    print(device_infos)
    return device_infos


if __name__ == '__main__':
    device_lists = get_device_infos()

运行结果:

List of devices attached
HDP9K18629901709	device


1==== ['HDP9K18629901709', '']
2==== ['HDP9K18629901709']
8.1.0

[{'platform_version': '8.1.0', 'server_port': 4723, 'system_port': 8200, 'device': 'HDP9K18629901709'}]

包含CMD操作:
在这里插入图片描述

二、Appium利用python自动启动和关闭appium server
参考文章

后台启动&关闭appium server的命令:

  • appium -a 127.0.0.1 -p 4723 –U HDP9K18629901709 --no-reset
  • appium -a 127.0.0.1 -p 4723 --log xxx.log --local-timezone

-p 4723 指定端口
–log xxx.log指定日志保存到指定文件内(可以是绝对路径)
–local-timezone指定时间为本地时间
–log-level error设置日志级别,默认是debug

根据端口号查看进程&关闭相应的进程:

在这里插入图片描述

  • 第一步查询:
  • 根据端口号查找进程号:netstat -o -n -a | findstr :端口号
# 命令
netstat -aon|findstr 4723
# 结果
  TCP    127.0.0.1:4723         0.0.0.0:0              LISTENING       1744
  • 第二步终止:
  • 终止进程taskkill /F /PID 进程号(PID号):
# 命令
taskkill /f /pid 1744
# 结果
成功: 已终止 PID  1744 的进程。

其他:终止所有appium进程 :taskkill /f /t /im node.exe

在这里插入图片描述
三、APPIUM报错:InvalidSelectorError: Locator Strategy ‘name’ is not supported for this session
在这里插入图片描述

1、打开本地文件 driver.js (路径:appium的安装路径\resources\app\node_modules\appium\node_modules\appium-android-driver\build\lib\driver.js)
比如我的:

C:\Users\make\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-android-driver\build\lib

2、查找 this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator'];

将 name加到里面: this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator','name'];

3、重启appium服务

四、记录pytest.ini

[pytest]
log_cli=true -o log_cli_level=INFO ; # 开启日记
log_level=NOTSET ; # 日志等级
log_format = %(asctime)s %(levelname)s %(message)s # 日记日期
log_date_format = %Y-%m-%d %H:%M:%S # 日记时间
addopts = -vs # 日志执行的命令

log_file = ./outputs/logs/log.txt # 日志存放地方
log_file_level = info # 记录日志等级
log_file_format = %(asctime)s %(levelname)s %(message)s # 同记录时间一样
log_file_date_format = %Y-%m-%d %H:%M:%S

五、conftest.py文件

from common.app_driver import AppDriver
from pageobjects.login_page import LoginPage
import pytest, platform, sys, requests, pytest_html, os, time, datetime
from common.all_path import logPath
from py.xml import html


# 编辑html报告标题
def pytest_html_report_title(report):
    report.title = "Appium report"



#  log输出文件目录
def pytest_configure(config):
    now = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
    logfile_name = f'{now}.log'
    config.option.log_file = os.path.join(config.rootdir, logPath, logfile_name)
    # 添加项目名称
    config._metadata["项目名称"] = "小程序测试"



# 增加测试结果time时间戳
def pytest_html_results_table_header(cells):
    cells.insert(1, html.th("Time", class_="sortable time", col="time"))
    cells.pop()


def pytest_html_results_table_row(report, cells):
    cells.insert(1, html.td(datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S'), class_="col-time"))
    cells.pop()


@pytest.fixture(scope='session')
def common_driver():
    global driver
    base_driver = AppDriver()
    driver = base_driver.driver()
    print(driver)
    lg = LoginPage(driver)
    if lg.login() == 1:
        pytest.skip('环境检查不通过')
    yield lg
    # driver.close_app()
    driver.quit()


六、附带pytest跳过的资料:点击跳转

七、附带pytest跳过的资料:点击输入键盘输入中文的问题,点击这里

总结:
在driver里面新增两个属性:

desired_caps["unicodeKeyboard"] = True  # 使用中文输入法条件一 使用unicode输入法
desired_caps["resetKeyboard"] = True  # 使用中文输入法条件二 讲键盘隐藏起来

如果遇到乱码问题:在运行 driver 加上下面代码
前面加上 # -*- coding:gb18030 -*- 如下图所示:
在这里插入图片描述

附带:安装好之后的下载包:
注意:Appium Sever 要和我们的 Appium-Python-Client 匹配上 不然会出现 :Method has not yet been implemented 报错

Appium Sever v1.13.0
PackageVersion
adbutils1.0.10
allure-pytest2.8.10
allure-python-commons2.8.10
apkutils21.0.0
Appium-Python-Client1.2.0
async-generator1.1
atomicwrites1.4.1
attrs22.1.0
BeautifulReport0.1.3
cached-property1.5.2
certifi2022.9.24
cffi1.15.1
chardet3.0.4
charset-normalizer2.1.1
cigam0.0.3
colorama0.4.6
colorlog6.6.0
ddt1.6.0
decorator5.1.1
Deprecated1.2.13
deprecation2.1.0
dill0.3.6
et-xmlfile1.1.0
exceptiongroup1.0.0
facebook-wda1.4.6
Faker13.12.0
filelock3.8.0
h110.14.0
idna2.8
iniconfig1.1.1
Jinja23.0.3
jsonpath0.82
logzero1.7.0
lxml4.9.1
MarkupSafe2.1.1
more-itertools9.0.0
MouseInfo0.1.3
openpyxl3.0.9
outcome1.2.0
packaging20.9
pdfminer20191125
Pillow9.3.0
pip22.3.1
pluggy0.13.1
progress1.6
py1.11.0
PyAutoGUI0.9.53
pycparser2.21
pycryptodome3.15.0
pyelftools0.29
PyGetWindow0.0.9
PyMsgBox1.0.9
pymssql2.2.4
pyparsing3.0.9
pyperclip1.8.2
PyRect0.2.0
PyScreeze0.1.28
PySocks1.7.1
pytest6.2.5
pytest-html3.2.0
pytest-metadata2.0.4
python-dateutil2.8.2
pytweening1.0.4
pywin32305
PyYAML5.3
requests2.22.0
retry0.9.2
selenium4.7.2
setuptools50.3.2
six1.16.0
sniffio1.3.0
sortedcontainers2.4.0
toml0.10.2
tornado6.2
trio0.22.0
trio-websocket0.9.2
uiautomator22.16.19
unittestreport1.4.3
urllib31.26.13
wcwidth0.2.5
weditor0.6.4
whichcraft0.6.1
wrapt1.14.1
wsproto1.2.0
xlrd1.2.0
xmltodict0.13.0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值